В первую очередь:
Это не ошибка в jQuery.
Существует существенная разница между атрибутом элемента :
var attr = element.getAttribute('foo');
и элемент свойство:
var prop = element.foo;
Этот ответ очень хорошо объясняет это - короткая версия - атрибут против свойства беспорядочный, и браузерыНе всегда получается правильно, но вы почти всегда хотите использовать свойство, а не атрибут при работе с DOM .
Забудьте оатрибутов.Вы почти всегда хотите свойство, а не атрибут.Если существует свойство и атрибут с одинаковым именем, свойство всегда представляет текущее состояние, а атрибут (в большинстве браузеров) представляет исходное состояние.Это влияет на свойства, такие как свойство value <input>
elements.
Если вы теперь понимаете кластер атрибутов! @ # $, Вы должны надеяться увидеть, куда это идет.
Селектор 'input[value=""]'
является селектором атрибута .Это означает, что это не селектор свойств.В обоих раундах в вашем примере $('input[value=""]')
соответствует только <input id="input2" value=""/>
, поскольку этот элемент (и только этот элемент) является тем, который:
- имеет атрибут
value
и - Этот атрибут
value
равен пустой строке.
.val()
задает свойство value элемента <input>
, а не атрибут value.Селектор атрибута соответствует, как следует из названия, атрибуту элемента, поэтому, конечно, он не выберет ничего другого, если атрибут не изменился.
Кроме того, jQuery делает все виды модных вещей под капотом.который:
- Обеспечивает согласованное поведение в разных браузерах, а
- Обеспечивает поведение, согласующееся с документацией, и
- Особенно с
.attr()
(в котором вполнеКлетчатое прошлое ) может быть очень уродливым.
О, и одна последняя ссылка: Джон Ресиг на jQuery 1.6 и .attr()
. Прочитайте это.