为什么HTML中不允许使用重复的ID

Van*_*bat 1 html javascript jquery dom

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

作为一名使用HTML多年的开发人员,我意识到元素id 应该是唯一的 - 我要问的是重复id的实际负面影响.

当然,getElementByID() - 类似于某些库中的函数可能会返回数组而不是单个元素,这可能会在开发人员没有预料到这种情况时引发问题.但是,据我所知,这些功能将继续如此清晰地运行,它们不是id重复的突破效果.

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

编辑:问题的驱动程序是我在生成列表/重复项目时看到了一些模板库,生成了具有重复ID的元素,我想知道它在实际条件下可能产生的影响以及如何决定是否采用这些库.

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

Kay*_*der 7

它总是"非法的".反对spec =非法.仅仅因为侥幸或过于慷慨的编译器"似乎工作"并不意味着它是有效的代码.

考虑它的另一种方式:至少,因为你可以使用duzint,这可能是错误的Englesh.你有一个慷慨的编译器/大脑可以理解(例如Google Chrome),但是英语知识有限的人(例如市场浏览器X的新手)或精神上无行为能力的人(例如Internet Explorer)可能根本不理解它...但是如果每个单词拼写正确/符合规范,就能理解它.

https://softwareengineering.stackexchange.com/questions/127178/two-html-elements-with-same-id-attribute-how-bad-is-it-really

我能找到的几个原因:

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

和:

不正确的不是灰色阴影.此代码违反了标准,因此不正确.它将无法验证检查,它应该.也就是说,目前市场上没有任何浏览器会抱怨它,或者根本没有任何问题.浏览器将有权投诉它,但目前任何一个版本都没有.这并不意味着未来版本可能不会严重对待此代码.

和:

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

和:

许多JavaScript库无法按预期工作

和:

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

  • “ ...或精神上无行为能力的人(例如Internet Explorer)” ahahaahah。不错的比较。:) (2认同)
  • @VanquishedWombat 我认为这对于一般编程新手来说将是一个非常有价值的类比。和中华酒一样,我觉得这很有趣。拒绝投票,所以不允许喜剧! (2认同)

Tes*_*ijn 6

规范说 UNIQUE

HTML 4.01 规范规定ID 必须在文档范围内唯一。

HTML 5 规范说的是同样的事情,但换言之。它说 ID 在其主子树中必须是唯一的,如果我们阅读它的定义,它基本上就是文档

避免重复

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

  • 返回错误?
  • 返回第一个匹配元素?
  • 返回最后一个匹配元素?
  • 返回一组匹配的元素?
  • 什么都不回?

但是,即使浏览器现在可以可靠地工作,也没有人能保证将来会出现这种行为,因为这违反了规范。这就是为什么我建议您不要在同一文档中重复 ID。

这是一个答案由罗伯特Koritnik软件工程要求由danludwig
问题:用相同id属性的两个HTML元素:如何不好是不是真的?

HTML 中不允许出现重复的 ID

那个代码不正确。不正确的不是灰色阴影。此代码违反了标准,因此是不正确的。它会失败验证检查,它应该。也就是说,目前市场上没有浏览器会抱怨它,或者根本没有任何问题。浏览器将在他们的权利范围内抱怨它,但目前它们中的任何一个的当前版本都没有。这并不意味着未来的版本可能不会严重对待此代码。

~来自丹雷

重复的 ID 和 JavaScript

因此,如果您在 HTML 中使用重复的 id,许多库将无法按预期工作。大多数图书馆将获得他们找到的第一个 id 并返回该元素。当我们查看纯 JavaScript 时:在document.getElementById("idName");多个具有相同 id 的元素的情况下应该返回。它说它必须按树顺序返回第一个元素。

  • FWIW,DOM 规范说明在具有相同 id 的多个元素的情况下 getElementById() 应该返回什么。它说它必须返回 [第一个元素,按树顺序](https://dom.spec.whatwg.org/#nonelementparentnode) (3认同)