我很好奇,如果我在网页中包含多个具有相同id的元素,会导致什么问题?
例如:
<div id='someID'>Some Content</div>
<div id='someID'>Some Other Content</div>
我很好奇,如果我在网页中包含多个具有相同id的元素,会导致什么问题?
例如:
<div id='someID'>Some Content</div>
<div id='someID'>Some Other Content</div>
<div class="someClass">Some Content</div>
<div class="someClass">Some Other Content</div>
Blair在下面的评论中指出,如果你需要通过JavaScript按类查找元素,可以通过从最近的具有ID的元素开始并告诉它要查找哪种节点类型来加快搜索速度。这在许多情况下可以保持访问速度快,但不会违反重复ID的规则:
HTML:
<div id="myNearestID">
<div class="someClass">Some Content</div>
<div class="someClass">Some Other Content</div>
</div>
JavaScript+JQuery:
$('#myNearestID div.someClass')
$('#myNearestID div.someClass')
。 - Blair McMillan使用ID的javascript会导致IE出现重大问题,这是主要的副作用。
总体而言,根据规范,ID是唯一的......浏览器制造商可以在他们的代码中自由地做出这个假设,并且任何由于涉及无效HTML的错误(Javascript、CSS等)......好吧,那就是你的问题:)
浏览器并没有义务真正修复它,我认为他们也不应该这样做。
我不确定浏览器在这种情况下如何呈现类型为#someID
的CSS规则(它们可能会将规则应用于所有这样的元素),但您肯定会在JavaScript和getElementById
中遇到问题。
我在其他地方读到,IE会为每个带有ID的元素创建一个全局变量。
我说这也是个问题,我错了吗?
还有几个点没有提到。
片段标识符:如果浏览器链接到 http://www.example.com#someID ,浏览器会如何处理?
内部引用:如果 someID 在两个输入元素上,并且您有 <label for="someID">... 如果用户单击标签,浏览器必须决定哪个输入应该获得焦点。(在 HTML5 中,这被定义为第一个输入,这不一定是您想要的)。同样适用于 ARIA 支持,某些属性(例如 aria-labelledby 和 aria-describedby)依赖于指向单个位置。
当你在JavaScript中执行以下操作时,你想要引用哪个控件:
document.getElementById("someID")
我认为浏览器不会抱怨,但你可能会遇到其他问题:
我认为这些问题足以证明不应在所有元素中使用相同的ID。
希望对你有所帮助。
当我们在JavaScript或代码后台文件中引用浏览器时,它会发疯。