gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:07 26 4
gpt4 key购买 nike

纯粹出于学术目的查看 Gmail 的源代码,我发现了这一点。

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

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

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

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

最佳答案

许可

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

Any string, with the following restrictions:
- must be at least one character long
- must not contain any space characters

规范还指出:

Previous versions of HTML placed greater restrictions on the content of ID values (for example, they did not permit ID values to begin with a number).

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

有一个widely-visited SO thread其中访问了一些关于 ID 的注意事项(主要是从 HTML 4 的角度来看)。

理由

仔细想了想,我发现这里有两个很好的问题:

为什么规范允许这样做?

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

撇开所有这些不谈,我相信 HTML 5 的一个关键目标是创建并非绝对必要的限制(这是 XHTML 的缺点)。仅仅因为尚未确定某物的用途并不意味着它将来不会。

尽管有很多不会起作用的东西,但某些东西可以正常工作,例如document.getElementById(":foo")

http://jsfiddle.net/Xjast/

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

Google 为什么要这样做?

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

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

关于html - ID 属性可以以冒号开头吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10713121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com