我从 Google 的 AdWords 网站获取数据,该网站具有多个相同的元素 id
。
您能否解释一下为什么以下 3 个查询不会产生相同的答案 (2)?
HTML:
<div>
<span id="a">1</span>
<span id="a">2</span>
<span>3</span>
</div>
记者:
$(function() {
var w = $("div");
console.log($("#a").length); // 1 - Why?
console.log($("body #a").length); // 2
console.log($("#a", w).length); // 2
});
原文由 Misha Moroshko 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据 W3C 规范,具有相同 ID 的 2 个元素不是有效的 html。
当您的 CSS 选择器只有一个 ID 选择器(并且未在特定上下文中使用)时,jQuery 使用本机
document.getElementById
方法,该方法仅返回具有该 ID 的第一个元素。但是,在其他两个实例中,jQuery 依赖于 Sizzle 选择器引擎(或
querySelectorAll
,如果可用的话),它显然选择了两个元素。结果可能因浏览器而异。但是,您永远不应在同一页面上使用相同 ID 的两个元素。如果您的 CSS 需要它,请改用类。
如果您绝对必须通过重复 ID 选择,请使用属性选择器:
看看小提琴:http: //jsfiddle.net/P2j3f/2/
注意: 如果可能,您应该使用类型选择器来限定该选择器,如下所示:
这是因为类型选择器比属性选择器更有效。如果用类型选择器限定属性选择器,jQuery 将首先使用类型选择器查找该类型的元素,然后仅在这些元素上运行属性选择器。这样效率更高。