jQuery选择器无法正常工作。可能的嘶嘶声?

时间:2013-08-13 23:15:17

标签: jquery selector sizzle

jQuery是我生活和呼吸的东西。就在最近(截至> = 1.10.1),jQuery与选择器有“打嗝”。例如,选择$("#catalog")将只返回一个元素,而选择$("div#catalog")则返回两个元素。另外,我最近遇到的问题是$("#page_id > div.my_class .all_children")这样的选择器没有返回任何内容,但是$("#page_id").find("div.my_class").find(".all_children")返回了我想要的内容(当前没有工作示例)。

在jsFiddle上有一个可重复的示例,它在Firefox和Chrome上有相同的“问题”(我还没有测试任何其他浏览器)。我想我会先发布这个,然后在jQuery.com上发布它作为bug之前得到输入。

我做错了吗?我是否误解了Sizzle和选择器?我知道“div#id”通常比“#id”更快(正确吗?),但它们不应该都能工作吗?

$(document).ready(function () {
    alert("Selector (#catalog): " + $("#catalog").length + " / " +      $("#catalog").find(".field_grid").length);
    console.debug("Without div: ", $("#catalog"), $("#catalog").find(".field_grid"));
    alert("Selector (div#catalog): " + $("div#catalog").length + " / " + $("div#catalog").find(".field_grid").length);
    console.debug("With div: ", $("div#catalog"), $("div#catalog").find(".field_grid"));
});

即使选择器几乎相同,上面的代码也会返回不同的结果。

看看小提琴:http://jsfiddle.net/AVWgW/2/。另外,看看控制台,我正在从jQuery转储返回对象。

想法?

1 个答案:

答案 0 :(得分:2)

您正在重复使用ID catalog

HTML中不允许这样做,ID必须是唯一的。

因此,当您进入未定义行为的领域时,任何事情都可能发生。