ID属性可以以冒号开头吗?

时间:2012-05-23 03:37:39

标签: html html5

为了纯粹的学术目的而查看Gmail的来源,我发现了这一点。

<input id=":3f4" 
    name="attach" 
    type="checkbox" 
    value="13777be311c96bab_13777be311c96bab_0.1_-1" 
    checked="">

奇迹奇迹,大多数元素的id都以:开头 我一直认为ID属性的定义就是这个。

  

ID和NAME令牌必须以字母([A-Za-z])开头,可能是   后跟任意数量的字母,数字([0-9]),连字符(“ - ”),   下划线(“_”),冒号(“:”)和句点(“。”)。

或者我错过了什么新东西?我的意思是HTML5可以吗?

1 个答案:

答案 0 :(得分:9)

容许性

最新的工作草案允许这样做:http://www.w3.org/TR/html-markup/datatypes.html#common.data.id

  

任何字符串,具有以下限制:
    - 必须至少有一个字符长
    - 不得包含任何空格字符

该规范还指出:

  

以前版本的HTML对内容施加了更多限制   ID值(例如,它们不允许ID值开头)   一个数字。)

您引用的定义显示在HTML 4 spec

widely-visited SO thread访问有关ID的一些注意事项(主要来自HTML 4的观点)。

原理

在考虑了更多之后,我意识到这里有两个好问题:

为什么规范允许这样做?

可以包含任何字符的ID都有可能破坏各种各样的东西,例如CSS选择器(如果没有使用正确的转义),Sizzle(jQuery使用)模式匹配,服务器ID(例如ASP.Net web)表单使用)和从模型属性生成的ID(例如可以使用MVC模式)。

除了所有这些内容之外,我认为HTML 5的一个关键目标是创建非绝对必要的限制(这是XHTML的缺点)。仅仅因为没有确定某个目的的某个目的但并不意味着它将来不会存在。

尽管不会工作的很多事情,但某些事情可以正常工作,例如document.getElementById(":foo")

http://jsfiddle.net/Xjast/

与大多数事情一样,开发人员应该了解他或她正在使用的工具。

为什么Google会这样做?

显然,除非您是Gmail小组的成员,否则无法做出最终答案。但是,Google大大减少并混淆了他们的代码;他们还管理大量的脚本,这表明定义明确的惯例。

这是另一个想法。如果Google正在利用CSS选择器需要转义某些字符这一事实会怎样?这将大大减少电子邮件中包含的内容的意外重新设置。