为什么这些带有html的jQuery选择器以这种方式工作?

时间:2012-05-22 00:11:11

标签: jquery jquery-selectors

鉴于此HTML:

<p htmlfor="afield">This field is required.</p>

这个jQuery选择器会找到p标签:

var filtered = $("*").filter("[for='afield']");

虽然这个不会:

$("p").filter("[for='afield']");

为什么第一个匹配? HTML中的属性是“htmlfor”,而选择器中的属性是“for”。

而且,为什么第二个匹配?

这是一个小提琴(有警报,对不起......)。

http://jsfiddle.net/f7v4h/1/

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

我正在使用jquery-validate插件。 [for='afield']是插件代码使用的语法,也是生成HTML的插件。我只是想了解发生了什么,以便我可以修复我网站上的错误。

1 个答案:

答案 0 :(得分:1)

将jQuery validate升级到1.9.0以查看它是否解决了问题。您可以通过Microsoft的CDN实时链接它:http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js

编辑:

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

http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-213157251似乎暗示这些属性是异常,因此以尴尬的方式重命名。也许这是jQuery的另一个很好的例子,它抽象出令人烦恼的浏览器异常,因此我们可以完成工作。