Javascript 为什么HTML中不允许重复ID

Javascript 为什么HTML中不允许重复ID,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,在什么情况下,HTML页面包含具有重复ID属性的元素是非法的 作为一名多年来一直使用HTML的开发人员,我知道其目的是元素ID应该是唯一的——我要问的是重复ID的实际负面影响 诚然,某些库中类似getElementByID()的函数可能返回数组而不是单个元素,当开发人员没有预料到这种情况时,这可能会导致问题。然而,据我所知,这些功能将继续运行,因此它们不会对id重复造成破坏性影响 那么,为什么说不允许重复ID呢 编辑:这个问题的驱动因素是,我在生成列表/重复项时看到一些模板库,生成具有重复ID的

在什么情况下,HTML页面包含具有重复ID属性的元素是非法的

作为一名多年来一直使用HTML的开发人员,我知道其目的是元素ID应该是唯一的——我要问的是重复ID的实际负面影响

诚然,某些库中类似getElementByID()的函数可能返回数组而不是单个元素,当开发人员没有预料到这种情况时,这可能会导致问题。然而,据我所知,这些功能将继续运行,因此它们不会对id重复造成破坏性影响

那么,为什么说不允许重复ID呢

编辑:这个问题的驱动因素是,我在生成列表/重复项时看到一些模板库,生成具有重复ID的元素,我想知道这在实践中可能会产生什么影响,以及如何决定是否采用这些库

我还想知道模态插件或任何其他插件的效果,它们可能会克隆现有的隐藏节点,从而通过代码创建一个副本,然后浏览器会在这种情况下做什么

它总是“非法的”。违反规范=非法。仅仅因为侥幸或过于慷慨的编译器“似乎可以工作”,并不意味着它是有效的代码

另一种思考的方式是:因为你可以用英语表达。你有一个能理解这一点的慷慨的编译器/头脑(例如谷歌浏览器),但有一些英语知识比较有限的人(例如新进入市场的浏览器X)或有精神障碍的人(例如Internet Explorer)可能根本听不懂……但如果每个单词拼写正确/符合规范,就可以理解

我可以找到几个原因:

根据DOM规范,“如果多个元素具有具有该值的ID属性,则返回的内容是未定义的”

以及:

不正确的颜色不是灰色的。此代码违反标准,因此不正确。它将无法通过验证检查,而且应该如此。这就是说,目前市场上没有一款浏览器会抱怨它,或者说它有任何问题。浏览器有权对此进行投诉,但目前任何浏览器的当前版本都没有。这并不意味着未来的版本可能不会对这段代码有不良影响

以及:

在css或javascript中,试图使用该ID作为选择器的行为是不可用的,并且可能因浏览器而异

以及:

许多javascript库无法按预期工作

以及:

经验表明,主要浏览器中的getElementById将返回文档中第一个匹配的元素。但这在未来可能并不总是如此

规格说明独特

表示ID必须是文档范围内唯一的

说了同样的话,但换言之。信息技术 表示ID在其主子树中必须是唯一的,基本上 如果我们

避免重复

但是由于HTML渲染器在处理HTML时非常宽容 它们允许重复的ID。这应该避免,如果有的话 以编程方式访问时,可能和严格避免 JavaScript中的id元素。我不确定什么是
getElementById
当找到多个匹配元素时,函数是否应返回? 如果它:

  • 返回一个错误
  • 返回第一个匹配元素
  • 返回最后一个匹配元素
  • 返回一组匹配的元素
  • 什么也不退
但即使浏览器现在工作可靠,也没有人能保证 因为这违反了规范,所以这种行为将在将来发生。 这就是为什么我建议不要在同一个系统中重复ID 文件

这是at的回答,
问题:

HTML中不允许重复ID

那个代码不正确。不正确的颜色不是灰色的。这 代码违反了标准,因此是不正确的。它将失败 验证检查,它应该。也就是说,目前没有浏览器 市场上的人会抱怨它,或者根本就没有问题 全部的浏览器有权对此进行投诉,但是 它们中任何一个的当前版本目前都没有。哪个 但这并不意味着未来的版本可能不会对这段代码处理得很糟糕

~z~来自

重复的ID和JavaScript

因此,如果在HTML中使用重复ID,许多库将无法按预期工作。大多数库将获得它们找到的第一个id并返回该元素。当我们看纯JavaScript时:
document.getElementById(“idName”)在多个元素具有相同id的情况下应返回。它表示必须返回

在什么情况下,HTML页面包含 具有重复ID属性的元素?

根据以下规定,在任何情况下都是非法的:

在HTML元素上指定时,
id
属性值必须在元素树中的所有id中唯一[…]


作为一名使用HTML多年的开发人员,我知道 其目的是元素ID应该是唯一的——我是什么 询问重复ID的实际负面影响。

据我所知,没有定义如何处理具有非唯一
id
s的文档。因此,在这些情况下,您无法在CSS中安全地使用id选择器

id
属性也用于(也称为“锚定”)。根据,浏览器应该导航到“树顺序中的第一个这样的元素”。但这可能会与哪个元素从上到下排在第一位相冲突