1

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 之前,我会先在此处发布以获取输入。

难道我做错了什么?我是否误解了 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 中转储返回对象。

想法?

4

1 回答 1

2

您正在重复使用 ID catalog

这在 HTML 中是不允许的,IDs 必须是唯一的。

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

于 2013-08-13T23:19:30.390 回答