jQuery选择器[name=value]不';行不通

jQuery选择器[name=value]不';行不通,jquery,internet-explorer,google-chrome,jquery-selectors,Jquery,Internet Explorer,Google Chrome,Jquery Selectors,我是jQuery的新手。我在使用[name=value]选择器时遇到了一个问题。 以下是HTML: <input type="number"/> 结果是:脚本的第一行可以工作,但第二行不行 这两条线都在IE8中工作。 这是怎么发生的?顺便说一句,我使用的是jQuery1.7.2。或者您可以在属性等于选择器上测试上述代码,但.val()只更改属性,因此选择器看不到更新 jQuery/Sizzle默认使用的本机querySelectorAll方法强制执行此“仅属性”行为 如果您中断了q

我是jQuery的新手。我在使用[name=value]选择器时遇到了一个问题。 以下是HTML:

<input type="number"/>
结果是:脚本的第一行可以工作,但第二行不行 这两条线都在IE8中工作。 这是怎么发生的?顺便说一句,我使用的是jQuery1.7.2。或者您可以在属性等于选择器上测试上述代码,但
.val()
只更改属性,因此选择器看不到更新

jQuery/Sizzle默认使用的本机
querySelectorAll
方法强制执行此“仅属性”行为

如果您中断了
querySelectorAll
的选择器,因此必须使用Sizzle,它将工作

// v------made it a non-standard Sizzle selector
$(":input[value='100']").val(200);
这是因为Sizzle选择器不一定与
qSA
选择器兼容。当然,这会稍微改变选择器的含义,但对于说明很有用

演示:


要使用标准选择器(在我看来这是个好主意),您可以使用
filter()

$("input").filter(function() { return this.value === '100'; })
          .val(200);
演示:

如果


将工作

快速和肮脏,这是我将使用的方法。val()是一个属性而不是属性,这意味着属性选择器在这种情况下不起作用。我已经创建了一个JSFIDLE,并克隆了元素以显示分离。好吧,真的教了我很多关于jQuery和qSA选择器的知识。奇怪的是,为什么原始代码中的两行都能在IE8中工作,因为它也实现了选择器API。该浏览器中可能还有其他操作。@BoltClock'sAnuicorn:似乎在IE8中向元素添加属性(或修改属性)也会修改属性。甚至自定义属性也使用
getAttribute
显示。IE9的行为似乎正确。这个答案解决了
$(“输入:hidden[value=true]”)的问题。长度
。更改为
$(“输入:隐藏”).filter(函数(){返回this.value==“true”;})。IE的长度。
$("input").filter(function() { return this.value === '100'; })
          .val(200);
<input type="nubmer" disabled="disabled" value="100" />​ // your fiddle have no `value`
$("input[value='100']").val(200)​​​​​​​