【发布时间】:2018-06-22 17:47:12
【问题描述】:
在什么情况下非法 HTML 页面包含具有重复 ID 属性的元素?
作为一名使用 HTML 多年的开发人员,我知道我的意图是元素 id 应该是唯一的 - 我要问的是重复 id 的实际负面影响。
诚然,某些库中类似于 getElementByID() 的函数可能会返回数组而不是单个元素,当开发人员没有预料到这种情况时,这可能会导致问题。但是,据我所知,这些功能将继续如此清晰地运行,它们不是 id 重复的破坏效应。
那么为什么说重复的 id 不被允许?
编辑:问题的驱动力是我在生成列表/重复项时看到了一些模板库,生成了具有重复 id 的元素,我想知道这在实际中可能会产生什么影响以及如何决定是否采用这些图书馆。
我还想知道模态插件或任何其他可能克隆现有隐藏节点并因此通过代码创建副本的效果,然后浏览器在这种情况下会做什么。
【问题讨论】:
-
getElementById只返回一个元素,从不返回数组。与 jQuery ID 选择器相同...不会查找多个,不会返回多个 -
@Luca 和 OP,如果您正在编写 JS,请考虑使用 data-* 属性而不是类。这允许您完全分离 JS/CSS 关注点。有一些小的性能优势需要担心,但我们的代码可维护性所带来的好处已经超过了假设的毫秒级减速。
-
一般来说,浏览器无论在做什么,在面对无效标记时都不会崩溃。所以你总是会得到一些行为,并且编写 HTML 规范是为了定义行为,并且在浏览器实现中保持一致。在大多数情况下,除了 CSS 选择器,匹配将在 DOM 中具有给定 ID 的第一个元素上。因此,大多数情况下,失败模式是匹配不会出现在您想要匹配的元素上。
-
关于您的编辑:我不会考虑使用会创建无效 HTML 的模板库。
-
ID 必须是唯一的,因为这就是“身份”这个词的含义!使用 ID 的全部原因是为了唯一地标识一个元素。对世界说,“这就是我们正在谈论的那个”。如果你不想这样,那么就不要使用 ID。
标签: javascript jquery html dom