Версия 1.6 jQuery была выпущена две недели назад . Одним из основных изменений была отдельная обработка атрибутов и свойств DOM. По сути, рассмотрим:
<input id="i" type="checkbox" checked />
В более ранних версиях jQuery $("#i").attr("checked")
Однако в v1.6 этот же код вернул бы пустую строку («»), поскольку это было фактическим значением атрибута HTML «check» при загрузке страницы. Значение свойства DOM будет получено с использованием $("#i").prop("checked")
К сожалению, это изменение вызвало небольшую путаницу в сообществе и могло нарушить работу сценариев. Основная проблема заключается в том, что пустая строка ложна, поэтому, хотя это правильное значение , она вводит недостатки логической логики, которые могут быть неудобны при отладке:
if ($("#i").attr("checked")) {
// this code runs in previous versions of jQuery
}
else {
// this code runs in jQuery 1.6
}
Команда jQuery старается поддерживать совместимость со старыми версиями. По этой причине метод v1.6.1 .attr()
Документация также была разъяснена в отношении булевых атрибутов HTML, таких как «флажок»:
- Метод .prop () должен использоваться для логических атрибутов / свойств и для свойств, которые не существуют в HTML.
- Булевы атрибуты, которые можно увидеть в HTML, должны продолжать обрабатываться методом .attr ().
Булевы атрибуты HTML: автофокус, автозапуск, асинхронность, проверено, элементы управления, отложено, отключено, скрыто, зацикливание, многократное, открытое, только для чтения, требуется, ограничено и выбрано.
Замечательно, что команда jQuery прислушивается к своим пользователям и готова отменить логическое решение по разработке ради стабильности и обратной совместимости. Возможно, другие проектные команды могли бы поучиться на своем примере?
jQuery 1.6.1 также исправляет около 20 мелких ошибок и может быть загружен с:
http://code.jquery.com/jquery-1.6.1.js
http://code.jquery.com/jquery-1.6.1.min.js
Повлиял ли на ваш код изменение jQuery v1.6 .attr ()?