为什么这些jQuery选择器与htmlfor一起工作?

为什么这些jQuery选择器与htmlfor一起工作?,jquery,jquery-selectors,Jquery,Jquery Selectors,鉴于此HTML: <p htmlfor="afield">This field is required.</p> 而这一条不会: $("p").filter("[for='afield']"); 为什么第一个匹配?HTML中的属性是“htmlfor”,选择器中的属性是“for” 还有,为什么第二个不匹配 这是一把小提琴(带有警报,对不起…) 编辑以解释我关心的原因,从评论中: 我正在使用jquery验证插件[for='afield']是插件代码使用的语法,也是生成H

鉴于此HTML:

<p htmlfor="afield">This field is required.</p>
而这一条不会:

$("p").filter("[for='afield']");
为什么第一个匹配?HTML中的属性是“htmlfor”,选择器中的属性是“for”

还有,为什么第二个不匹配

这是一把小提琴(带有警报,对不起…)

编辑以解释我关心的原因,从评论中:


我正在使用jquery验证插件
[for='afield']
是插件代码使用的语法,也是生成HTML的插件。我只是想了解发生了什么,这样我就可以修复我网站上的一个bug。

将jQuery validate升级到1.9.0,看看它是否解决了这个问题。您可以通过Microsoft的CDN进行实时链接:

编辑:

升级jQuery和jQuery.validate似乎解决了“它不工作”而不是“为什么”的问题。试图回答“为什么”:


似乎表明这些属性是例外,因此以尴尬的方式重命名。也许这是jQuery将恼人的浏览器异常抽象出来的另一个很好的例子,这样我们就可以完成工作。

只是一个旁注:在jQuery 1.7中,它不能在两种情况下都工作(正如预期的那样),为什么不使用
[htmlfor='afield']
?好问题。我正在使用jqueryvalidate插件,并试图弄清楚我的站点上的情况<代码>[for='afield']是插件代码使用的语法,也是生成HTML的插件。这让我觉得是个bug。我正在挖掘,看看是否能找到修复它的实际票证。升级验证插件确实解决了问题,但我仍然不明白为什么。生成的HTML仍然是

此字段是必需的。

。JS现在表示
.filter(函数(){return$(this).attr('for')==name;})
这并没有什么不同——它仍然在为寻找一个
属性,而实际上它是
htmlfor
$("p").filter("[for='afield']");