Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html ID属性能否以冒号开头?_Html - Fatal编程技术网

Html ID属性能否以冒号开头?

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]

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

<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都会发生变化。很可能是扔掉一堆刮刀。