小编典典

多个具有相同ID的元素响应一个CSS ID选择器

html

在一页中为多个元素提供相同的ID是否安全?例如,当使用某些jquery插件,两次或多次运行某些滑块或图库时,通常会发生这种情况。我们知道,开发人员喜欢给html容器一些ID,以使脚本工作更快。

让我们阅读w3.org文档:

使ID类型的属性特别的原因是,没有两个这样的属性可以具有相同的值。无论使用哪种文档语言,ID属性都可以用来唯一标识其元素。

但是下一个示例具有2个具有相同ID的元素的示例在所有浏览器中都可以正常使用,尽管它无效:

#red {

  color: red;

}


<p id="red">I am a red text.</p>

<p id="red">I am a red text too.</p>

有人可以解释这种奇怪的情况吗?


阅读 1408

收藏
2020-05-10

共1个答案

小编典典

浏览器总是尝试“静默失败”。这意味着即使您的HTML无效,浏览器也会尝试猜测您的意图,并相应地进行处理。

但是,背离规范会导致一些非常无法预料的副作用。

例如:

document.getElementById('red');

只会让你第一个。

您还必须在用户可能使用的所有浏览器中测试页面,以确保您的代码按预期工作。您不能仅仅 假设 它会起作用。

简而言之: 不要这样做!如果您需要使用同一CSS定位多个元素,请使用类名。那就是他们设计的目的…


话说回来; 如果您 确实 需要选择具有相同ID的多个元素,请使用属性选择器:

document.querySelectorAll('p[id="red"]');

但是请注意,这在IE7及以下版本中不起作用…

2020-05-10