当前位置: 首页 > 面试题库 >

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

柴博
2023-03-14
问题内容

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

作为使用HTML已有多年经验的开发人员,我知道这样做的目的是元素ID 应该 是唯一的-我要问的是重复ID的实际负面影响。

当然,某些库中类似于getElementByID()的函数可能返回数组而不是单个元素,并且当开发人员未预期这种情况时,这可能会导致问题。但是,据我所知,此类功能将继续清晰地运行,它们并不是id重复项的破坏性影响。

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

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

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


问题答案:

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

另一种思考的方式是:因为您想让肯德勒·恩格莱什(KorrectEnglesh)成为您的一面。您有一个能理解这一点的慷慨的编译器/大脑(例如Google Chrome),但是英语知识更有限的人(例如,市场上刚接触过浏览器X的人)或精神上无能力的人(例如Internet Explorer)可能根本不理解它…但是如果每个单词的拼写正确/符合规范,便能够理解它。

我可以找到几个原因:

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

和:

错误不会以灰色阴影出现。该代码违反标准,因此不正确。这将使验证检查失败,应该这样做。就是说,目前市场上没有浏览器会抱怨或有任何问题。浏览器有权投诉该浏览器,但是任何浏览器的当前版本都没有。这并不意味着将来的版本可能不会对此代码造成不良影响。

和:

在CSS或JavaScript中尝试使用该ID作为选择器的行为是无法猜测的,并且可能因浏览器而异。

和:

许多JavaScript库无法按预期运行

和:

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



 类似资料:
  • 问题内容: 我读了这个问题,并认为如果可以写的话,很容易解决(不是没有它就不能解决): 我不确定在很多情况下它是否有用,但是我想知道为什么它没有用,以及其他语言中是否存在类似的东西。 你们有什么感想? 编辑: 澄清一下:是的,我知道,这在Java中是不可能的,我也不是很想念它。这不是我期望的工作,并且惊讶于出现编译器错误。我只是有这个主意,喜欢讨论它。 问题答案: 它违反了封装。你不应该能够绕过父

  • 问题内容: 我知道Java和C#中不允许多重继承。许多书只是说,不允许多重继承。但是可以通过使用接口来实现。没有任何关于为什么不允许它的讨论。谁能确切告诉我为什么不允许这样做? 问题答案: 简短的答案是:因为语言设计师决定不这样做。 基本上,.NET和Java设计器似乎都不允许多重继承,因为他们认为添加MI会增加语言的复杂性,而带来的好处却很少。 要获得更有趣和深入的阅读,Web上提供了一些文章,

  • 问题内容: 我想知道为什么它是Java不允许超负荷使用,虽然他们都以不同的方式使用? 使用方式如下: 而另一种形式: 使用方式如下: 这背后有什么原因吗? 问题答案: 这个15.12.2.5选择最具体的方法对此进行了讨论,但是它相当复杂。例如,在Foo(数字…整数)和Foo(整数…整数)之间进行选择 为了向后兼容,这些实际上是同一件事。 例如,您可以将main()定义为 一种使它们与众不同的方法是

  • 问题内容: W3指定表列(带有元素)仅允许使用四个CSS规则- 边框,背景,宽度和可见性。 有人知道这个决定的原因吗?如果可以使用边框和背景,为什么不使用字体和颜色呢? 问题答案: IanHixie在这里详细解释:为什么只有四个属性应用于表列的奥秘。相关报价: 文本的颜色取决于其元素的“颜色”属性。除非指定,否则“ color”属性(基本上)默认为“ inherit”,这意味着“采用父元素的值”。

  • 其中map类型为,但我的测试在编译时失败: 为什么JUnit(或Hamcrest)不能确定使用哪个匹配器?

  • 当重写超类的方法时,Java 允许返回类型是协变的。 为什么在覆盖方法时不允许相反的逆变参数类型?