Какой способ проверить, проверен ли элемент, лучше?.is (': проверено') или .prop ('проверено') - PullRequest
6 голосов
/ 14 июня 2011

И .is(':checked'), и .prop('checked') можно использовать для проверки, установлен ли флажок.

Есть ли какие-нибудь интересные / важные различия между этими двумя способами запроса состояния флажок или это в значительной степени только вопрос личных предпочтений?

Ответы [ 2 ]

8 голосов
/ 14 июня 2011

Они оба заканчивают тем, что проверяют одну и ту же вещь.

Если вы используете 1.6.0 или выше, prop('checked') является наиболее прямым способом jQuery.JQuery не должен анализировать и обрабатывать селектор, чтобы выяснить, что делать. [Примечание ниже]

Вы также можете (начиная с 1.6.1) снова использовать attr('checked') какс 1.5.x и ранее.

Или вы можете перейти непосредственно к элементу.Предполагая, что x - это проверяемая вещь, если вы знаете , что хотя бы один элемент соответствует, то:

if (x[0].checked) { /* ... */ }

Если вы не уверены и хотите хеджировать свои ставки:

if (x[0] && x[0].checked) { /* ... */ }

Но, если вы не находитесь в действительно узком цикле, используйте все, что вам проще всего читать, так как различия в производительности не будут иметь значения.Я считаю, что последние довольно легко читать, и я знаю, что они очень быстрые, поэтому я использую их.Но если вы находите их неловкими, используйте все, что вам больше нравится.Нет вреда в использовании is(':checked'), если вам это нравится, и вы не видите фактического снижения производительности от него (что вряд ли будет препятствовать, опять же, какой-то узкой петле).


Примечание: градус , для которого prop является более прямым, чем is, зависит от браузера.prop это не просто прямая проверка свойства, сначала он проходит через несколько уровней косвенности;и is не обязательно является чрезвычайно сложным: например, в браузерах WebKit is может быть достаточно прямым, поскольку WebKit предоставляет функцию для проверки соответствия элемента селектору и изначально поддерживает :checked;в Firefox (и, я подозреваю, в IE), is приводит к огромному количеству вызовов функций, поскольку этот, казалось бы, простой селектор пробирается сквозь кишки Sizzle.

2 голосов
/ 14 июня 2011

Я бы использовал prop('checked') сам (если мне не нужно было поддерживать более старые версии jQuery), поскольку он обращается к свойству checked непосредственно из объекта и достаточно легко читается.

is(':checked') запускает немного дополнительных служебных данных при разборе строки и т. Д. Обычно я резервирую :checked для случая, когда выбирает элементов.

...