В версии 1.6 мы разделили обработку атрибутов DOM и свойств DOM на отдельные методы.Новый метод .prop () устанавливает или получает свойства для элементов DOM, а .removeProp () удаляет свойства.В прошлом jQuery не проводил четкой границы между свойствами и атрибутами.Как правило, атрибуты DOM представляют информацию о состоянии DOM, полученную из документа, например атрибут value в разметке.Свойства DOM представляют динамическое состояние документа;например, если пользователь щелкает в элементе ввода выше и набирает def, то .prop("value")
- это abcdef, но .attr("value")
остается abc.
В большинстве случаев браузер обрабатывает значение атрибута как начальное значение длясвойство, но логические атрибуты, такие как флажок или отключен, имеют необычную семантику.
Например, рассмотрим разметку <input type="checkbox" checked>
.Наличие проверенного атрибута означает, что свойство DOM .checked
имеет значение true, даже если у атрибута нет значения.В приведенном выше коде проверяемое значение атрибута представляет собой пустую строку (или undefined
, если атрибут не указан), но проверяемое значение свойства равно true
.
До того, как jQuery 1.6, .attr("checked")
вернул логическое значениезначение свойства (true
), но начиная с jQuery 1.6 он возвращает фактическое значение атрибута (пустую строку), которое не изменяется, когда пользователь нажимает флажок, чтобы изменить его состояние.
Естьнесколько альтернатив для проверки текущего проверенного состояния флажка.Лучшим и наиболее эффективным является непосредственное использование свойства DOM, как в this.checked
внутри обработчика событий, когда он ссылается на элемент, по которому был выполнен щелчок.В коде, использующем jQuery 1.6 или новее, новый метод $(this).prop("checked")
извлекает то же значение, что и this.checked
, и является относительно быстрым.Наконец, выражение $(this).is(":checked")
работает для всех версий jQuery.