我有一个非常简单的例子jsfiddle:jQuery的 “按属性” 选择
HTML:
<input type="text"/>
<input type="text" value="aaa"/>
JS:
$("input:first").val("aaa");
alert($("input[value='aaa']").length);
为什么Chrome和IE返回不同的结果?为什么Chrome中的jQuery在使用jQuery设置时无法识别“值”?
我该如何解决它?我需要Chrome会返回与IE完全相同的结果。
编辑:我接受的我的回答,因为想这一点后,我还是不明白一些事情(也许我错了关于几个部分):
1)据我所知,显示的文本在浏览器的文本框中,应始终处于“值”属性中,因为如果我提交表单,则将文本框和其他输入字段中显示的“值”提交给服务器(如果它们未被禁用)。
2)所以如果文本框中显示的文本应该存储在“value”中以便提交,那么对于我来说,如果$("input[type='text']").val("aaa")
将文本“aaa”赋值给“value”属性是很自然的,因为它可能会被提交后来。如果是这样,为什么$("input[value='aaa']")
不接受?
3)一些其他的事情....当我不使用“val”方法的jQuery,而是直接输入文本到文本框,然后它不会去“值”属性?我做了另一个例子,我不使用“val”将文本分配给文本框。我直接在文本框中输入它,然后$("input[value='aaa']")
不再提取它。
对我来说这非常奇怪......我明白属性和属性之间的区别,但是由于HTML表单的本质,我不明白为什么“val”不会将值赋值给属性,并且直接输入,它不会去“值”属性。
BTW:在http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/我发现如下:
既不.attr()也不.prop()应被用于获取/设定值。 改为使用.val()方法(虽然使用.attr(“value”, “somevalue”)将继续工作,就像1.6之前一样)。
他们说“val”应该设置属性...或者我的英语不允许我理解它是正确的吗?
请给我解释一下:)
嗯,这是值得看的属性和特性之间的区别( http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/),而选择器可能只搜索属性(以chrome),而jQuery选择器引擎(Sizzle)可能接受价值以及... – DerWaldschrat
@DerWaldschrat这是一个答案。属性和属性之间的区别很重要。 – Prinzhorn
好的,当我完成jsFiddle时,我将为此创建一个完整的答案,但仅使用.val()来访问该值绝对是正确的。 – DerWaldschrat