349

我知道一个 id 在 HTML/XHTML 页面中必须是唯一的。

对于给定的元素,我可以为其分配多个 id 吗?

<div id="nested_element_123 task_123"></div>

我意识到我有一个简单的解决方案,只需使用一个类。我只是对以这种方式使用 id 感到好奇。

4

18 回答 18

222

不,来自XHTML 1.0 规范

在 XML 中,片段标识符属于 ID 类型,每个元素只能有一个 ID 类型的属性。因此,在 XHTML 1.0 中,id 属性被定义为 ID 类型。为了确保 XHTML 1.0 文档是结构良好的 XML 文档,XHTML 1.0 文档在上面列出的元素上定义片段标识符时必须使用 id 属性。有关在将 XHTML 文档作为媒体类型 text/html 提供服务时确保此类锚点向后兼容的信息,请参阅 HTML 兼容性指南。

于 2008-10-10T16:09:16.577 回答
209

与其他人所说的相反,正确答案是YES

选择器规范对此非常清楚:

如果一个元素有多个 ID 属性,则必须将所有这些属性都视为该元素的 ID,以用于 ID 选择器。这种情况可以通过混合使用 xml:id、DOM3 Core、XML DTD 和特定命名空间来实现知识。


编辑

澄清一下:是的,一个 XHTML 元素可以有多个 id,例如

<p id="foo" xml:id="bar">

但是使用空格分隔的列表将多个 id 分配给同一id属性是不可能的。

于 2011-04-16T07:53:16.787 回答
28

我的理解一直是:

  • ID 是一次性的,仅适用于一个元素...

    • 每个元素都作为 唯一标识符 (仅)归属于一个元素
  • 类可以多次使用...

    • 因此,它们可以应用于多个元素,并且类似但不同的是,每个元素可以有多个类(即多个类)
于 2008-10-10T16:13:22.683 回答
27

不。 虽然W3C对 HTML 4 的定义似乎没有明确涵盖您的问题,但 name 和 id 属性的定义表明标识符中没有空格:

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") , 冒号 (":") 和句点 (".")。

于 2008-10-10T16:10:35.467 回答
20

不,每个 DOM 元素,如果它有一个 id,它就有一个唯一的 id。您可以使用以下方法对其进行近似:

<div id='enclosing_id_123'><span id='enclosed_id_123'></span></div>

然后使用导航来获得你真正想要的。

如果您只是想应用样式,类名会更好。

于 2008-10-10T16:11:23.250 回答
20

每个元素只能有一个 ID,但确实可以有多个类。但是不要有多个类属性;将多个类值放入一个属性中。

<div id="foo" class="bar baz bax">

是完全合法的。

于 2008-10-10T23:14:43.317 回答
4

不,单个标签不能有多个 id,但我看到一个标签具有一个name属性和一个id属性,某些应​​用程序将其视为相同。

于 2008-10-10T16:08:52.473 回答
4

不,如果你想沿着这条路走,你应该使用嵌套的 DIV。此外,即使可以,想象一下运行 document.getElementByID() 时会引起的混乱。如果有多个ID,它将获取什么ID?

在一个稍微相关的主题上,您可以将多个添加到一个 DIV。请参阅 Eric Myers 的讨论,

http://meyerweb.com/eric/articles/webrev/199802a.html

于 2008-10-10T16:17:01.290 回答
3

我想说技术上是的,因为实际上渲染的内容在技术上总是依赖于浏览器。大多数浏览器都尽可能地遵守规范,据我所知,CSS 规范中没有任何内容反对它。我只会保证在任何其他解释器介入之前发送到浏览器的实际 HTML、CSS 和 JavaScript 代码。

但是,我也说不,因为我通常测试的每个浏览器实际上都不允许你这样做。

如果您需要自己查看,请将以下内容另存为 .html 文件并在主要浏览器中打开。在我测试过的所有浏览器中,JavaScript 函数都不匹配元素。但是,从 id 标签中删除“hunkojunk”,一切正常。

示例代码

<html>
<head>
</head>
<body>
    <p id="hunkojunk1 hunkojunk2"></p>

    <script type="text/javascript">
        document.getElementById('hunkojunk2').innerHTML = "JUNK JUNK JUNK JUNK JUNK JUNK";
    </script>
</body>
</html>
于 2012-04-18T18:21:17.190 回答
3

分配给 div 元素的任何 ID 都是唯一的。但是,您可以在“下”分配多个 ID,而不是“分配给”一个 div 元素。在这种情况下,您必须将这些 ID 表示为<span></span>ID。

假设您希望同一个 HTML 页面中的两个链接指向页面中的同一个 div 元素。

两个不同的链接

<p><a href="#exponentialEquationsCalculator">Exponential Equations</a></p>

<p><a href="#logarithmicExpressionsCalculator"><Logarithmic Expressions</a></p>

指向页面的同一部分

<!-- Exponential / Logarithmic Equations Calculator -->
<div class="w3-container w3-card white w3-margin-bottom">
   <span id="exponentialEquationsCalculator"></span>
   <span id="logarithmicEquationsCalculator"></span>
</div>
于 2018-10-30T20:55:35.110 回答
2

7.5.2 元素标识符: id 和 class 属性

id 属性为元素分配一个唯一标识符(可以由 SGML 解析器验证)。

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") , 冒号 (":") 和句点 (".")。

所以“id”必须是唯一的,不能包含空格。

于 2013-08-13T13:41:41.033 回答
1

正如其他人在我之前所说的那样,简单的答案是否定的。一个元素不能有多个 ID,并且一个 ID 不能在一个页面中多次使用。尝试一下,您会发现它不起作用

回应tvanfosson关于在两个不同元素中使用相同 ID 的回答。据我所知,一个 ID 只能在一个页面中使用一次,无论它是否附加到不同的标签。

根据定义,需要一个 ID 的元素应该是唯一的,但如果您需要两个 ID,那么它并不是真正唯一的,而是需要一个类。

于 2010-04-20T11:40:02.187 回答
1

不。

话虽如此,没有什么可以阻止你这样做。但是你会得到与各种浏览器不一致的行为。不要这样做。每个元素一个 ID。

如果您想对一个元素进行多个分配,请使用类(用空格分隔)。

于 2015-04-25T17:54:01.300 回答
0

这很有趣,但据我所知,答案是肯定的。我不明白为什么需要嵌套 ID,因为您通常会将它与另一个具有相同嵌套 ID 的元素交叉。不做就没有意义,做也没什么意义。

于 2008-10-10T16:06:59.263 回答
0

类是专门为此而设计的,下面是您可以理解的代码:

<html>
<head>
    <style type="text/css">
     .personal{
            height:100px;
            width: 100px;

        }
    .fam{
            border: 2px solid #ccc;
        }
    .x{
            background-color:#ccc;
        }

    </style>
</head>

<body>
    <div class="personal fam x"></div>
</body>
</html>
于 2014-03-01T16:11:58.893 回答
0

不。

3.2.3.1 开始的 id 属性

该值不得包含任何空格字符。

id="a b"<-- 在该ValuE中找到空格字符。

也就是说,您可以设置多个 ID 的样式。但如果你遵循规范,答案是否定的。

于 2017-12-16T13:13:36.950 回答
0

ID 应该是唯一的,因此您应该只在页面上使用一次特定的 ID。类可以重复使用。

查看HTML id 属性(W3Schools) 了解更多详情。

于 2020-01-28T11:52:22.470 回答
-2

我不认为你可以有两个身份证,但它应该是可能的。两次使用相同的身份证是不同的情况......就像两个人使用相同的护照。然而,一个人可能有多个护照......来找这个是因为我遇到了一个员工可以拥有多个功能的情况。说具有 id="sysadm teamcoordinator" 的“sysadm”和“team coordinator”可以让我从其他页面引用它们,以便employees.html#sysadm 和employees.html#teamcoordinator 会指向同一个地方......有一天有人否则可能会在 sysadm 仍然是 sysadm 时接管团队协调员功能......然后我只需要更改 employees.html 页面上的 id......但就像我说的 - 它不起作用:(

于 2010-09-13T10:53:52.413 回答