哪些DOM元素不能接受id属性?

14
我正在阅读这篇关于canvas元素的基础教程。以下句子中的(almost)引起了我的注意:

id属性不仅适用于<canvas>元素,而且是可以应用于(几乎)每个HTML元素的默认HTML属性之一。

哪些html元素不能接受一个id?
3个回答

14

来自于 w3schools(是的,我知道...):

注意:在以下标签中,id属性无效:<base><head><html><meta><param><script><style><title>

请注意,这仅适用于HTML4,但解释了教程中的"几乎(almost)"。

正如其他人指出的,HTML5接受在所有元素上使用id。


7
这是我曾经赞同的唯一一个包含w3schools的答案。 - Madara's Ghost
2
HTML5规范指出,全局属性可以在所有HTML元素上指定,即使这些元素没有被HTML5指定。https://developer.mozilla.org/en/HTML/Global_attributes - John Stimac
2
w3schools因为在SEO方面超越了W3C,并且他们并不总是充分校对其内容以确保正确性,所以受到了很多批评。他们的许多文章被认为过于简化,特别是那些在SQL语句中使用字符串连接而不是参数的文章(使他们的示例容易受到SQL注入攻击)。 - Robert Harvey
2
你可能会创造历史,其中包含 w3schools 的“好答案”。 - Madara's Ghost
11
在这个特定问题上,w3school有两个错误:它没有指明其语句适用于HTML 4.01(而不是XHTML 1.0或HTML5);并且它错误地声称param不允许使用id,但在HTML 4.01中确实允许。 - Jukka K. Korpela
显示剩余2条评论

13
在HTML5中,id属性是一种全局属性,可以在任何元素上指定。
如果你查阅HTML4的文档类型声明,你可以发现那些在属性列表中没有定义%attrs;来表明它们不支持id属性的元素。这些元素在“文档头部”章节中靠近底部,包括:HEAD、TITLE、BASE、META、STYLE、SCRIPT和HTML。
请注意,尽管PARAM元素在其属性列表中没有包含%attrs;声明,但它在该列表中明确允许id属性本身。
<!ATTLIST PARAM
  id          ID             #IMPLIED  -- document-wide unique id --
  name        CDATA          #REQUIRED -- property name --
  value       CDATA          #IMPLIED  -- property value --
  valuetype   (DATA|REF|OBJECT) DATA   -- How to interpret value --
  type        %ContentType;  #IMPLIED  -- content type for value
                                      when valuetype=ref --
  >

3
在HTML5中,canvas元素是一个允许使用id属性的元素,这一点有些令人惊讶。在较早的HTML版本中,存在各种限制。HTML 4.01排除了baseheadhtmlmetascriptstyletitle等元素,但是XHTML 1.01取消了这个限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接