Html ID属性能否以冒号开头?
纯粹出于学术目的查看Gmail的来源,我遇到了这个问题Html ID属性能否以冒号开头?,html,Html,纯粹出于学术目的查看Gmail的来源,我遇到了这个问题 <input id=":3f4" name="attach" type="checkbox" value="13777be311c96bab_13777be311c96bab_0.1_-1" checked=""> 奇迹中的奇迹,大多数元素的ID都以: 我一直认为ID属性的定义是这样的 ID和名称标记必须以字母([a-Za-z])开头,并且可以是 后跟任意数量的字母、数字([0-9]
<input id=":3f4"
name="attach"
type="checkbox"
value="13777be311c96bab_13777be311c96bab_0.1_-1"
checked="">
奇迹中的奇迹,大多数元素的ID都以:
我一直认为ID属性的定义是这样的 ID和名称标记必须以字母([a-Za-z])开头,并且可以是 后跟任意数量的字母、数字([0-9])、连字符(“-”), 下划线(“”)、冒号(“:”)和句点(“.”) 还是我错过了什么新东西?我的意思是HTML5可以吗?允许性 最新工作草案中允许: 任何字符串,具有以下限制:
-必须至少有一个字符长
-不能包含任何空格字符 规范还指出: 以前版本的HTML对内容有更大的限制 ID值(例如,它们不允许ID值以 一个数字) 您引用的定义将显示在中 这里有一个例子,介绍了一些关于ID的注意事项(主要是从HTML4的角度) 根本原因 仔细思考之后,我意识到这里有两个好问题: 规范为什么允许这样做? 可以包含任何字符的ID都有可能破坏所有类型的东西,例如CSS选择器(如果没有使用正确的转义)、Sizzle(jQuery使用)模式匹配、服务器ID(例如ASP.Net web表单使用)以及从模型属性生成的ID(例如可以使用MVC模式) 撇开所有这些不谈,我相信HTML5的一个关键目标是不创建并非绝对必要的限制(这是XHTML的一个缺点)。仅仅因为某件事的目的还没有确定,并不意味着它在未来就不会存在 尽管有很多事情是行不通的,但某些事情还是可以正常工作,例如
document.getElementById(“:foo”)
与大多数事情一样,开发人员需要了解他或她正在使用的工具
谷歌为什么这样做?
很明显,除非你是Gmail团队的一员,否则这个问题无法得到最终答案。然而,谷歌严重最小化和混淆了他们的代码;他们还管理大量的脚本,这意味着定义良好的约定
还有一个想法。如果谷歌正在利用CSS选择器需要转义某些字符这一事实呢?这将大大有助于减少对电子邮件中所含内容的意外重新排序。这假设您可以信任浏览器。:-)从知识共享和易于搜索的角度来看,这是一个有效的问题。如果你在谷歌上搜索“ID属性可以以冒号开头吗?”你会收到这样的回答(现在有点不正确,尽管有数百张投票),答案是:。@murtaza:你答错了。对我来说,Gmail工作正常吗?savy,我问的是HTML的合法性?这是一个完全合法的问题,不确定所有的哭喊是关于什么的-一分钟之内有大量更糟糕的问题出现。了解这一点很重要,这样您就可以编写符合浏览器应该遵循的规范的代码,而不依赖浏览器对错误代码的优雅处理。仅仅因为它起作用并不意味着它是有效的——仅仅因为谷歌这样做也不能使它正确(但在这种情况下,它是正确的)。你个人与问题的作者有一些个人争议,否则我不知道,@Murtaza。这个问题是合法的,我之所以来到这里,是因为我做了和他一样的事情,检查Gmail代码。所以它实现了它的意义。在这里回答这个问题对每个人都很有价值,不仅仅是问题的作者。他还引用了一段话,证明他在提出问题之前做了一些研究。你的第一反应是难以置信的业余和错误。我不敢相信一个声誉超过1k的人会说这样的废话,我甚至没有笑,这是多么错误。对于CSS,你只需要避开冒号。所以
\:foo{background color:red;}
工作正常。见到你很高兴知道。我会在我的回答中注意到这一点。@TimMedora:谷歌为什么这样做?这正是我的问题。感谢您的澄清。我刚刚注意到,每次单击按钮时,按钮的ID都会发生变化。很可能是扔掉一堆刮刀。