Есть ли ситуация, когда я должен использовать .attr() вместо .prop()?

Насколько мне известно, функция .prop() может делать все то же, что и функция .attr(), но в целом более безопасным и простым способом.

Например:

  • Если я хочу получить состояние флажка по умолчанию в HTML, я могу сделать $('myCheckbox').prop('defaultChecked') (вместо $('myCheckbox').attr('checked')). На самом деле это кажется более безопасным, чем использование .attr('checked'), поскольку атрибут может потерять свое значение, если флажок будет динамически изменен, в то время как .prop('defaultValue') сохранит значение (например, http://jsfiddle.net/p1Lrgwnb/1/)
  • Несмотря на то, что я часто вижу, что .attr() используется последовательно с такими значениями, как id и name в примерах StackOverflow, .prop() также отлично работает с ними. Я не знаю какой-либо причины, по которой .attr() кажется предпочтительным для этих ценностей, кроме традиционных условностей и привычек.

Был ли когда-нибудь случай использования, когда мне нужно было бы использовать .attr() или чтобы функция .prop() не давала мне нужной мне информации?

EDIT: Этот вопрос не имеет ничего общего с тем, в чем разница между .prop() и .attr(). Я подробно изучил эти вопросы в StackOverflow, в том числе вопрос, указанный ниже (stackoverflow.com/questions/5874652/prop). -vs-attr ). Из моего вопроса ясно, что я полностью понимаю разницу между ними, возможно, лучше, чем большинство. Мой вопрос заключается в том, есть ли какие-либо обстоятельства, при которых я должен использовать .attr(), что совершенно отличается от вопроса .prop() и .attr().


person dallin    schedule 06.08.2015    source источник
comment
Ну, всегда есть [этот уже существующий пост][1], чтобы ответить на ваш вопрос. [1]: stackoverflow.com/questions/5874652/prop-vs-attr   -  person dudewad    schedule 06.08.2015
comment
Я голосую за повторное открытие этого вопроса, потому что я не верю, что какие-либо ответы на связанный вопрос действительно обсуждают, когда разработчик может захотеть использовать attr() в реальном сценарии.   -  person StriplingWarrior    schedule 06.08.2015
comment
@dudewad Пожалуйста, прочитайте мой вопрос еще раз. Он полностью отличается от вопроса, который вы связали, который я прочитал и подробно изучил, прежде чем опубликовать свой вопрос. Если вы можете найти ответ на мой вопрос в этой ссылке, пожалуйста, укажите его.   -  person dallin    schedule 06.08.2015
comment
Извините за драму из-за получения ответа на этот вопрос. Я также считаю, что это определенно не дубликат.   -  person Maximillian Laumeister    schedule 06.08.2015
comment
@dallin: на случай, если это не откроется снова, я добавлю это в качестве комментария. Одна из возможных причин заключается в том, что, поскольку атрибуты не изменяются, когда вы их выбираете или отменяете выбор, вы можете использовать attr(), чтобы узнать, какое значение было там при первой загрузке страницы, при условии, что у вас нет кода, который ошибочно пытается напрямую изменить атрибут. См. jsfiddle.net/7s6qpnv6.   -  person StriplingWarrior    schedule 06.08.2015
comment
@MaximillianLaumeister, лол, спасибо. Наверное, это частично моя вина. Мне нужно поработать над тем, чтобы научиться лучше всего формулировать вещи, чтобы сделать вопрос однозначно уникальным и прямолинейным.   -  person dallin    schedule 06.08.2015
comment
@StriplingWarrior Спасибо за ваш комментарий! Насколько мне известно, вы можете получить доступ к тем же значениям через функцию .prop(), если вы знаете свойство, соответствующее атрибуту. Например, вместо использования .attr('checked') вы можете использовать .prop('defaultChecked'), чтобы получить начальное значение при загрузке страницы. Затем у вас также есть преимущество в том, что вы получаете логическое значение вместо строки, поэтому вы можете проверить его в операторе if. Я не знаю ни одного примера, но кто-нибудь знает, есть ли какие-либо атрибуты, у которых нет соответствующего свойства, такого как defaultChecked в DOM?   -  person dallin    schedule 06.08.2015


Ответы (1)


<input id="check1" checked="checked" type="checkbox" />
.attr('checked') //returns  checked
.prop('checked') //returns  true
.is(':checked') //returns true

Метод prop возвращает логическое значение для проверенных, выбранных, отключенных, только для чтения и т. д., в то время как attr возвращает определенную строку. Таким образом, вы можете напрямую использовать .prop(‘checked’) в условии if.

.attr() вызывает .prop() внутри, поэтому метод .attr() будет немного медленнее, чем доступ к ним напрямую через .prop().

Для jQuery 1.6+ в основном будет использоваться prop, потому что он проще и шире, чем attr. В большинстве старых проектов attr используется для получения информации о текущем состоянии элемента. Но теперь prop взял на себя эту работу, и attr будет заменен на prop.

Проверьте эту ссылку

person Shivakrishna    schedule 31.07.2016