为什么HTML中不允许重复的ID值?
在什么情况下,HTML页面包含具有重复ID属性的元素是非法的?
作为一名使用HTML多年的开发人员,我知道我们的意图是元素ID应该是唯一的-我问的是重复ID的实际负面影响。
当然,某些库中类似getElementByID()的函数可能返回数组而不是单个元素,这可能会在开发人员没有预料到这种情况时导致问题。然而,据我所知,这样的函数将继续运行,非常清楚,它们不会是id重复的破坏效应。那么为什么说不允许重复ID?
编辑:这个问题的驱动因素是,我在生成列表/重复项时看到一些模板库,生成具有重复ID的元素,我想知道这在实际中可能会产生什么影响,以及如何决定是否采用这些库。
我还想知道模态插件或任何其他可能克隆现有隐藏节点从而通过代码创建副本的插件的效果,以及在这种情况下浏览器会做什么。
解决方案
这是Robert Koritnik在Software Engineering由danludwig询问的Robert Koritnik回答 问题:Two HTML elements with same id attribute: How bad is it really?规格说明唯一
HTML 4.01 specification表示ID在文档范围内必须是唯一的。
HTML 5 specification表示相同的事情,但换句话说。它 表示ID在其主子树中必须是唯一的,这基本上是 文档如果我们read the definition of it.
避免重复
但是由于HTML呈现器在涉及到HTML时非常宽容 呈现时,它们允许重复的ID。这是应该避免的,如果有的话。 以编程方式访问时可能和严格避免 元素在JavaScript中按ID排序。我不确定getElementById
函数是否应在找到多个匹配元素时返回? 是否应该:但是,即使现在浏览器工作可靠,也没有人能保证 因为这是违反规范的。 这就是为什么我建议您不要在相同的 文档。
- 返回错误?
- 返回第一个匹配元素?
- 返回最后一个匹配元素?
- 是否返回一组匹配的元素?
- 不返回任何内容?
HTML中不允许重复ID
该代码不正确。不正确不会以灰色阴影出现。这 代码违反了标准,因此是不正确的。它会失败的 验证检查,而且应该这样做。也就是说,目前还没有浏览器 市场上的人会抱怨它,或者对它有任何问题,在 全。浏览器有权投诉,但是 目前,它们中的任何一个的当前版本都没有这样的功能。哪一个 并不意味着将来的版本可能不会糟糕地对待此代码。
~发件人Dan Ray
重复的ID和JavaScript
因此,如果您在HTML中使用重复的ID,许多库将无法按预期工作。大多数库将获得他们找到的第一个id并返回该元素。当我们查看纯JavaScript时:如果有多个具有相同id的元素,则应该返回document.getElementById("idName");
。它说它必须返回the first element, in tree order.
相关文章