Line 9, Column 14: Duplicate ID x. <div id="x">was</div>
Warning Line 8, Column 14: The first occurrence of ID x was here. <div id="x">Barry</div>
Error Line 10, Column 14: Duplicate ID x. <div id="x">here</div>
Warning Line 8, Column 14: The first occurrence of ID x was here. <div id="x">Barry</div>
大多数(如果不是全部)浏览器在调用 getElementById时选择具有给定 ID 的第一个元素。一些通过 ID 查找元素的库继承了这种行为,而较新的库(正如 gman 在回答中指出的那样)将使用更明确的 querySelector和 querySelectorAll方法,这两种方法分别毫不含糊地选择 第一或 所有匹配元素。大多数(如果不是全部)浏览器也将 ID 选择器(例如 #myid)分配的样式应用于所有具有指定 ID 的元素。如果这就是你所期望和打算的,那么就没有意外后果了。如果你期望/打算做其他事情(例如,所有带 ID 的元素都由 getElementById返回,或者样式只应用于一个元素) ,那么你的期望将不会实现,任何依赖于这些期望的特性都将失败。
其他不止一次使用同一个 ID 的网站包括 Amazon.com、 ebay.com、远征军网站和 cnn.com
显然 id 只是元素上的另一块元数据。
getElementById已经过时了。您可以对所有元素使用 querySelectorAll,或者对第一个元素使用 querySelector,不管选择器是什么,所以如果您希望所有元素的 id 都是 foo,那么
document.querySelectorAll('#foo') // returns all elements with id="foo"
在哪里,如果你想只使用第一个元素使用 querySelector
document.querySelector('#foo') // returns the first element with id="foo"
document.querySelector('.foo') // returns the first element with class "foo"
document.querySelector('foo') // returns the first <foo> element
document.querySelector('foo .foo #foo') // returns the first element with
// id="foo" that has an ancestor
// with class "foo" who has an
// ancestor <foo> element.