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转储返回对象。
想法?
答案 0 :(得分:2)
您正在重复使用ID catalog
。
HTML中不允许这样做,ID
必须是唯一的。
因此,当您进入未定义行为的领域时,任何事情都可能发生。