【问题标题】:What characters are allowed in DOM IDs? [duplicate]DOM ID 中允许使用哪些字符? [复制]
【发布时间】:2010-11-07 19:18:56
【问题描述】:

可能重复:
What are valid values for the id attribute in HTML?

下划线看起来不错。破折号呢?其他特殊字符?

【问题讨论】:

    标签: html dom


    【解决方案1】:

    其实 HTML 和 XHTML 是有区别的。 由于 XHTML 是 XML,因此适用于 XML ID 的规则:

    ID 类型的值必须与名称产生式匹配。

    NameStartChar ::=   ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] |
                              [#xD8-#xF6] | [#xF8-#x2FF] |
                              [#x370-#x37D] | [#x37F-#x1FFF] |
                              [#x200C-#x200D] | [#x2070-#x218F] |
                              [#x2C00-#x2FEF] | [#x3001-#xD7FF] |
                              [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |
                              [#x10000-#xEFFFF]
    
    NameChar     ::=      NameStartChar | "-" | "." | [0-9] | #xB7 |
                            [#x0300-#x036F] | [#x203F-#x2040]
    

    来源:Extensible Markup Language (XML) 1.0 (Fifth Edition) 2.3

    对于 HTML,以下适用:

    id = 名称 [CS]
    此属性为元素分配名称。此名称在文档中必须是唯一的。

    ID 和 NAME 令牌必须以 字母 ([A-Za-z]) 并且可以跟随 由任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")。

    来源:HTML 4 Specification, Chapter 6, ID Token

    【讨论】:

    • 很明显,这意味着 XML 名称是 HTML 名称的超集。即任何有效的 HTML 名称也是有效的 XML/XHTML 名称。
    • 对于那些打算使用 CSS 或 jQuery 的人来说,在 id 中使用句点和冒号是不可能的。但是......这是黑客入侵的绝妙方式!
    • @Dan 你总是可以逃脱“。”和 ":" 在 jquery 中使用反斜杠 ...
    • 正则表达式等效/^[a-z]+[a-z0-9\-_:\.]*$/i
    • @GajusKuizinas ...但前提是您以欧洲为中心并且只接受 ASCII 字母。像[#xF900-#xFDCF] 这样的“gobbeldygook”字符范围表示名称中允许的有用 Unicode 字符,而您的正则表达式不允许。
    【解决方案2】:

    W3C 规范 Basic HTML data types“ID 和 NAME 令牌必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9]) 、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")。"

    【讨论】:

    • 实际上,由于 XHTML 文档中的 XML 命名空间,对 ":" 的支持很混乱;避免使用它是明智的。
    • 请特别注意,这意味着 ID 不能包含空格,这是有道理的,因为否则
      将不匹配此 CSS 规则:#my thing { color:红色}
    • 谢谢。当与 CSS 或 JS 交互时,这些东西会不会混淆?我可以看到 CSS 与点和冒号混淆了,而且我发现 JS 不能很好地处理破折号。
    • 同样,在定义 JS 和 CSS API 时,句号字符往往被忽略,所以也要避免。
    • 这些限制已在 HTML5 中解除。见mathiasbynens.be/notes/html5-id-class
    【解决方案3】:

    如果我们从字面上理解您问题的标题,那么 HTML 和 XHTML 规则都不适用。相反,相关规范是 DOM 规范。

    以 DOM Level 3 为源,假设“DOM ID”是指设置了“ID”标志的属性,则值为“DOMString”,其字符可以是任何 UTF-16可编码字符。

    16 位单位

    DOMString 的基本单位。这表明对 DOMString 的索引 以 16 位为单位发生。这必须 不要被误解为 DOMString 可以存储任意 16 位 单位。 DOMString 是一个字符 以 UTF-16 编码的字符串;这意味着 UTF-16 的限制为 以及其他相关的 对字符串的限制必须 得到维护。单个字符,对于 数字形式的示例 字符参考,可能对应于 一个或两个 16 位单元。

    当然,这可能不是您想要的,而 Ludwig Weinzierl 的答案正是您想要的。然而,明智的做法是了解并非所有 DOM 都可以序列化为 HTML 或 XHTML,并且 DOM 有自己的一套规则。

    【讨论】:

      【解决方案4】:

      根据 HTML 4.0 规范

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

      【讨论】:

      【解决方案5】:

      为了有效的 html aka xhtml,Philippe 是正确的。 id 属性没有空格或特殊字符(当然不需要转义)。只有 52 个字符的字母表、大小写、数字 0-9、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签