为HTML元素创建id属性时,该值有哪些规则?


当前回答

从HTML 4规范。。。

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

其他回答

对于HTML 4,技术上的答案是:

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

HTML5甚至更为宽松,只表示id必须至少包含一个字符,并且不能包含任何空格字符。

在XHTML中,id属性区分大小写。

作为一个纯粹的实际问题,您可能需要避免某些字符。句点、冒号和“#”在CSS选择器中具有特殊含义,因此您必须在CSS中使用反斜杠或在传递给jQuery的选择器字符串中使用双反斜杠来转义这些字符。想想在你疯狂地使用id中的句点和冒号之前,你需要多长时间在样式表或代码中转义一个字符。

例如,HTML声明<div id=“first.name”></div>是有效的。您可以在CSS中将该元素选择为#first\.name,并在jQuery中选择为:$('#first\\name')。但是如果您忘记了反斜杠$('#first.name'),您将拥有一个完全有效的选择器来查找一个id优先且具有类名的元素。这是一个容易忽视的错误。从长远来看,选择id名(连字符而不是句点)可能会更快乐。

通过严格遵守命名约定,可以简化开发任务。例如,如果您将自己完全限制为小写字符,并且始终使用连字符或下划线分隔单词(但不能同时使用连字符和下划线,请选择其中一个,不要使用另一个),那么您就有了一个易于记忆的模式。你永远不会怀疑“是firstName还是firstName?”,因为你永远知道你应该输入first_name。更喜欢驼色?然后限制自己,不要使用连字符或下划线,并且始终对第一个字符使用大写或小写,不要混用它们。


现在一个非常模糊的问题是,至少有一个浏览器Netscape 6错误地将id属性值视为区分大小写。这意味着,如果您在HTML中键入id=“firstName”(小写'f'),在CSS中键入#firstName{color:red}(大写'f'),则错误浏览器将无法将元素的颜色设置为红色。在2015年4月进行编辑时,我希望您没有被要求支持Netscape 6。将其视为历史脚注。

HTML5:

它消除了对id属性的额外限制(请参见此处)。剩下的唯一要求(除了文件中的唯一要求)是:

该值必须至少包含一个字符(不能为空)它不能包含任何空格字符。


HTML5之前:

ID应匹配:

[A-Za-z][-A-Za-z0-9_:.]*

必须以A-Z或A-Z字符开头可以包含-(连字符)、_(下划线)、:(冒号)和。(期间)

但我们应该避免:和。因为:

例如,一个ID可以被标记为“a.b:c”,并在样式表中被引用为#a.b:cc,但除了作为元素的ID之外,它还可以表示ID“a”、类“b”、伪选择器“c”。最好避免混淆,远离使用。和:总计。

此外,永远不要忘记ID是唯一的。一旦使用,ID值可能不会再次出现在文档中的任何位置。

您可能有许多ID,但所有ID都必须具有唯一的值。

另一方面,还有class元素。就像ID一样,它可以出现多次,但值可能会被反复使用。

实际上,许多网站使用以数字开头的id属性,尽管这在技术上是无效的HTML。

HTML5草案规范放宽了id和name属性的规则:它们现在只是不透明的字符串,不能包含空格。

自ES2015以来,如果文档字符集设置为UTF-8,我们也可以使用几乎所有的Unicode字符作为ID。

在此测试:https://mothereff.in/js-variables

阅读:ES2015中有效的JavaScript变量名

在ES2015中,标识符必须以$、_或任何带有Unicode派生的核心属性ID_Start。标识符的其余部分可以包含$、_、U+200C零宽度非连接符、U+200D零宽度连接符或任何Unicode符号派生的核心属性ID_Continue。

const target=document.querySelector(“div”).idconsole.log(“Div-id:”,目标)document.getElementById(目标).style.background=“chartreuse”第二部分{边框:5px蓝色实心;宽度:100%;高度:200px}<div id=“H̹̙̦̮͉̩̗ͻͧ̏̾Eͨ͆͒̆ͮ͏̷̰̣̫̤C͈̻ͯ͐O̜͎͍878;͐͗ͤ781;͢M̡̲̭͍͇̼̟̯̦̉̒͠Ḛ̛̙̞̪̗ͥͤͩ̾͑̔͐ͅṮ“”</div>


你应该使用它吗?可能不是个好主意!

阅读:JavaScript:“函数体后面缺少语法错误}”