允许性
在最新的工作草案中是允许的: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 模式)。
除了所有这些,我相信 HTML 5 的一个关键目标是不创建并非绝对必要的限制(这是 XHTML 的一个缺点)。仅仅因为尚未确定某事的目的并不意味着它不会在未来出现。
尽管有很多事情是行不通的,但某些事情工作得很好,例如document.getElementById(":foo")
http://jsfiddle.net/Xjast/
与大多数事情一样,开发人员需要了解他或她正在使用的工具。
谷歌为什么这样做?
显然,除非您是 Gmail 团队的一员,否则无法最终回答这个问题。然而,谷歌极大地减少和混淆了他们的代码。他们还管理大量脚本,这表明了明确定义的约定。
这是另一个想法。如果 Google 利用 CSS 选择器需要转义某些字符的事实怎么办?这将大大有助于减少电子邮件中包含的内容的意外重新样式化。