在使用JQuery提交错误之前将此发布在此处进行讨论。
考虑这个小提琴:
我在HTML中设置一个输入的value属性,另一个使用Javascript。然后我请求JQuery选择空输入(输入值为==“”)。它返回1的长度(其中的一个输入是#input2)。
就好像这个空属性选择器基于原始HTML中的输入标记的原始值而不是当前值进行选择,即使任何其他方法检查value属性(如.value或.val) ())会告诉我它实际上并不是空的。
这似乎是JQuery中的一个错误。正确的吗?
答案 0 :(得分:4)
首先是:
元素之间存在显着差异 的属性:强>
var attr = element.getAttribute('foo');
和元素属性:
var prop = element.foo;
This answer非常好地解决了 - 短版本是属性与属性混乱,浏览器并不总是正确,但是you almost always want to use the property, not the attribute when working with the DOM。
忘记属性。你几乎总是想要一个属性,而不是一个属性。如果属性和具有相同名称的属性都存在,则属性始终表示当前状态,而属性(在大多数浏览器中)表示初始状态。这会影响属性,例如
<input>
元素的值属性。
如果您现在了解属性群集!@#$,您应该希望看到它的发展方向。
选择器'input[value=""]'
是属性选择器。这意味着它不是属性选择器。在您的示例的两个回合中,$('input[value=""]')
仅匹配<input id="input2" value=""/>
,因为该元素(并且只有该元素)是:
value
属性和value
属性等于空字符串。 .val()
设置<input>
元素的value属性,而不是value属性。顾名思义,属性选择器匹配元素的属性,因此当属性没有改变时,它不会选择任何不同的东西。
此外,jQuery还会做各种各样的精彩内容:
.attr()
(有quite the checkered past)可能非常难看。 哦,最后一个链接:John Resig on jQuery 1.6 and .attr()
。 阅读。
答案 1 :(得分:0)
试着试一试:
var emptyInputsRound1 = $('input[value=""]');
$('#input2').attr("value",'hi2'); //notice change
var emptyInputsRound2 = $('input[value=""]');
$('#output').text(emptyInputsRound1.length + ', ' + emptyInputsRound2.length);