4

出于纯粹的学术目的查看Gmail的来源,我遇到了这个。

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

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

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

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

4

1 回答 1

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 模式)。

除了所有这些,我相信 HTML 5 的一个关键目标是创建并非绝对必要的限制(这是 XHTML 的一个缺点)。仅仅因为尚未确定某事的目的并不意味着它不会在未来出现。

尽管有很多事情是行不通的,但某些事情工作得很好,例如document.getElementById(":foo")

http://jsfiddle.net/Xjast/

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

谷歌为什么这样做?

显然,除非您是 Gmail 团队的一员,否则无法最终回答这个问题。然而,谷歌极大地减少和混淆了他们的代码。他们还管理大量脚本,这表明了明确定义的约定。

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

于 2012-05-23T03:41:14.420 回答