一个HTML元素可以有多个ID?

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

我的问题是,对于一个给定的元素,我可以给它分配多个ID?

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

我意识到我简单地使用一个类,有一个简单的解决scheme。 我只是好奇地用这种方式使用ID。

没有。从XHTML 1.0规范

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

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

select器规范非常清楚:

如果一个元素具有多个ID属性,那么为了IDselect器的目的,它们都必须被视为该元素的ID。使用xml:id,DOM3 Core,XML DTD和特定于名称空间的混合可以达到这种情况知识。


编辑

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

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

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

我的理解一直是:

  • ID是一次性使用 ,只适用于一个元素…

    • 每个都被认为是一个唯一的标识符(仅)一个单一的元素
  • 类可以被使用多次

    • 因此,它们可以应用于多个元素 ,而且类似地不同, 每个元素可以有多个类(即多个类)

没有。虽然从W3C的HTML 4的定义似乎并没有明确涵盖您的问题, 名称和ID属性的定义说在标识符中没有空格:

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

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

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

是完全合法的。

不,每个DOM元素(如果它有一个id)都有一个唯一的id。 你可以使用类似的东西来近似它:

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

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

如果你只是想应用样式,类名称更好。

不,你不能有一个标签的多个ID,但我看到一个标签有一个name属性和一个id属性,这是由一些应用程序处理相同。

不,你应该使用嵌套的DIV,如果你想低头的path。 此外,即使你可以,想象一下当你运行document.getElementByID()时会引起的混乱。 如果有多个ID,它将获得什么ID?

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

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

http://www.w3.org/TR/REC-html40/struct/global.html#h-7.5.2

id属性为元素分配一个唯一的标识符(可以由SGMLparsing器validation)。

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

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

没有。

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

如果你想多个赋值给元素使用类(用空格分隔)。

这很有趣,但据我所知,答案是一个公司没有。 我不明白为什么你需要一个嵌套的ID,因为你通常会与另一个具有相同嵌套ID的元素交叉。 如果你不是没有意义的话,如果你这样做的话,那还是很有意义的。

我知道这已经过了一年了,但是我自己对此很好奇,我相信别人会在这里find自己的方式。 简单的答案是否定的,正如别人之前所说的。 一个元素不能有多个ID,并且一个ID不能在一个页面中多次使用。 试试看,你会看到它不能正常工作。

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

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

我想说技术上是的,因为真正得到的是在技术上总是依赖于浏览器。 大多数浏览器尽可能地保持规范,据我所知在css规范中没有任何反对它的规定。 我只是要保证实际的html,css,javascript代码,在任何其他解释步骤之前被发送到浏览器。

然而,我也说不,因为我通常testing的每个浏览器实际上并没有让你。 如果您需要自己查看,请将以下内容保存为.html文件并在主要浏览器中打开它。 在我testing的所有浏览器中,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> 

类是专门为此,这里是你可以理解的代码

 <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> 

我不认为你可以有两个Id,但应该是可能的。 两次使用相同的身份证是另一种情况…就像两个人使用相同的护照一样。 然而,一个人可以有多个护照…来找这个,因为我有一个单一的员工可以有几个function的情况。 说“sysadm”和“团队协调员”id =“sysadm teamcoordinator”会让我引用他们从其他页面,这样employees.html#sysadm和employees.html#teamcoordinator会导致同一个地方…有一天某人否则可能会接pipe团队协调员function,而系统pipe理员仍然是系统pipe理员…那么我只需要更改employees.html页面上的ID …但就像我说的 – 它不工作:(