当一个web页面中,有多个id相同的元素,DOM的根据id查询节点的操作是怎么进行的呢?
首先,要明确的是id选择器规则上是不允许有相同的,要保证id是唯一的。如果是有共同属性的某类元素进行操作时,用class选择器。
其次,页面当中是可以存在多个相同id,页面能正常显示,且不会出现错误。
鉴于这个问题被面试官提及,虽然感觉工作上不会如此使用,但还是做了一下测试。
公共js代码:
<script type="text/javascript">
function t1(){
var p = document.getElementById("first");
console.log(p.innerHTML);
}
</script>
测试1:同级标签,赋上相同的id
body部分:
<div>
<input type="button" value="按钮1" οnclick="t1();"/>
</div>
<div>
<p id="first">1111111</p>
</div>
<div>
<p id="first">22222</p>
</div>
结果:
测试2:父子级标签,赋上相同id
body部分:
<div>
<input type="button" value="按钮1" οnclick="t1();"/>
</div>
<div id="first">
3333333
<p id="first">1111111</p>
</div>
结果:
测试3:“叔侄”级标签,赋上相同的id,“叔”级标签在前
body部分:
<div> <input type="button" value="按钮1" οnclick="t1();"/> </div> <p id="first">444444</p> <div> <p id="first">1111111</p> </div>
结果:
测试4:“叔侄”级标签,赋上相同的id,“叔”级标签在后
body部分:
<div> <input type="button" value="按钮1" οnclick="t1();"/> </div> <div> <p id="first">1111111</p> </div> <p id="first">555555</p>
结果:
综上,在一个web页面中,存在多个相同id的元素时,DOM的根据id查询节点,读取到的是 从上至下读取到的第一个id的元素节点,与其他相同id的元素无关。
但在使用时,仍然建议按规定来一个页面中的id是唯一的,避免发生不必要的错误。