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

nav*_*een 4 html html5

为纯粹的学术目的查看Gmail的来源,我遇到了这个.

<input id=":3f4" 
    name="attach" 
    type="checkbox" 
    value="13777be311c96bab_13777be311c96bab_0.1_-1" 
    checked="">
Run Code Online (Sandbox Code Playgroud)

不知道奇迹,大多数元素都有以:
我一直认为ID属性的定义开头的ID为止.

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

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

Tim*_*ora 9

容许

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

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

该规范还指出:

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

您引用的定义出现在HTML 4规范中.

有一个广泛访问的SO线程访问有关ID的一些注意事项(主要从HTML 4的角度来看).

合理

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

为什么规范允许这个?

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

抛开所有这些事情,我认为HTML 5的一个关键目标是创建非绝对必要的限制(这是XHTML的缺点).仅仅因为没有确定某个目的但并不意味着它不会在未来.

尽管很多事情不会工作,某些工作的事情就好了,例如document.getElementById(":foo")

http://jsfiddle.net/Xjast/

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

为什么Google会这样做?

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

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