id
属性时,对于其值有哪些规则?对于HTML 4,技术上的答案是:
ID和名称令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母、数字([0-9])、连字符("-")、下划线("_")、冒号(":")和句点(".")。
HTML 5 更加自由,只要求 id 必须包含至少一个字符,并且不能包含任何空格字符。
在 XHTML 中,id属性是区分大小写的。
作为一个纯粹的实际问题,您可能希望避免某些字符。句点、冒号和#在CSS选择器中具有特殊含义,因此您必须使用CSS中的反斜杠或传递给jQuery的选择器字符串中的双反斜杠来转义这些字符。在使用id中的句点和冒号之前,请考虑您将不得不多少次转义样式表或代码中的字符。<div id="first.name"></div>
是有效的。你可以在 CSS 中选择该元素,如 #first\.name
,在 jQuery 中也可以这样做:$('#first\\.name')。
但是如果你忘记了反斜杠,$('#first.name')
,你将会得到一个完全有效的选择器,寻找一个具有 id 为 first
并且还有类名为 name
的元素。这是一个容易被忽视的错误。你可能更愿意在长期运行中选择 id first-name
(使用连字符而不是句点)。firstName
还是 FirstName
?”因为你总是知道应该输入 first_name
。喜欢驼峰命名法?那就限制自己只使用它,没有连字符或下划线,并始终、一致地使用大写或小写字母作为第一个字符,不要混用。
id="firstName"
(小写'f')并在CSS中键入了#FirstName { color: red }
(大写'F'),那个有缺陷的浏览器将无法将元素的颜色设置为红色。截至编辑时,即2015年4月,我希望您不需要支持Netscape 6。把它当做一段历史记录吧。span#hs.order
。请参考https://bugzilla.mozilla.org/show_bug.cgi?id=1861666。 - undefined根据HTML 4规范:
ID和NAME标记必须以字母([A-Za-z])开头,后面可以跟随任意数量的字母、数字([0-9])、连字符("-")、下划线("_")、冒号(":")和句点(".")。
一个常见的错误是使用以数字开头的ID。
在id/name属性中,技术上可以使用冒号和句号,但我强烈建议避免使用。
在CSS(以及许多JavaScript库,如jQuery)中,句点和冒号都具有特殊含义,如果不小心使用,可能会遇到问题。句点是类选择器,冒号是伪选择器(例如,当鼠标悬停在元素上时使用“:hover”)。
如果您给一个元素命名为"id=my.cool:thing",那么您的CSS选择器就会像这样:
#my.cool:thing { ... /* some rules */ ... }
这实际上是在CSS中表达“具有'id'为'my',类为'cool'和'thing'伪选择器”的元素。
只使用大小写字母、数字、下划线和连字符。并且如上所述,请确保您的ID是唯一的。
这应该是您的首要关注点。
自HTML5 开始,ID 属性的取值只需满足以下条件:
对于 Class 属性也有类似的规则(当然不需要唯一性)。
因此,ID 和 Class 的取值可以是全数字、单个数字、标点符号以及特殊字符等,但不能包含空格。这与 HTML4 中有很大的不同。
在 HTML4 中,ID 的取值必须以字母开头,后面只能跟字母、数字、连字符、下划线、冒号和句点。
在 HTML5 中,这些都是有效的:
<div id="999"> ... </div>
<div id="#%LV-||"> ... </div>
<div id="____V"> ... </div>
<div id="⌘⌥"> ... </div>
<div id="♥"> ... </div>
<div id="{}"> ... </div>
<div id="©"> ... </div>
<div id="♤₩¤☆€~¥"> ... </div>
请记住,在ID的值中使用数字、标点符号或特殊字符可能会在其他情况下(例如CSS、JavaScript、正则表达式)引起问题。
例如,在HTML5中,以下ID是有效的:
<div id="9lions"> ... </div>
然而,在CSS中它是无效的:
CSS2.1规范如下:
在CSS中,标识符(包括选择器中的元素名称、类和ID)只能包含字符[a-zA-Z0-9]和ISO 10646字符U+00A0及更高级别,以及连字符(-)和下划线(_);不能以数字、两个连字符或连字符后跟数字开头。
在大多数情况下,您可以在受限制或具有特殊含义的上下文中转义字符。
W3C参考
HTML5
id
属性指定其元素的唯一标识符(ID)。该值必须在元素的主子树中的所有ID之间是唯一的,并且必须至少包含一个字符。该值不得包含任何空格字符。
注意:对ID的形式没有其他限制;特别是,ID可以仅由数字组成,以数字开头,以下划线开头,仅由标点符号等组成。
如果指定了属性,则其值必须是表示元素所属各种类别的一组以空格分隔的标记。
HTML元素分配给它的类包括在类属性的值上拆分时返回的所有类。(重复的忽略。)
在类属性中,作者可以使用的标记没有其他限制,但鼓励作者使用描述内容性质而非所需内容呈现的值。
jQuery可以处理任何有效的ID名称。您只需要转义元字符(即点、分号、方括号等)。这就像说JavaScript仅因为您无法编写而引用引号而有问题。
var name = 'O'Hara';
它取消了对 id 属性的额外限制 (见此)。仅保留以下要求 (除了在文档中唯一):
ID 应该匹配:
[A-Za-z][-A-Za-z0-9_:.]*
-
(连字符)、_
(下划线)、:
(冒号)和.
(句点)但应避免使用:
和.
,因为:
例如,一个ID可能被标记为“a.b:c”,并在样式表中引用为# a.b:c,但除了作为元素的ID外,它还可以表示ID“a”,类“b”,伪选择器“c”。最好避免混淆,完全不使用.
和:
。
id="c365720c"
。 - DecPK连字符、下划线、句点、冒号、数字和字母都可以在CSS和jQuery中使用。以下内容应该有效,但必须在整个页面中唯一,并且必须以字母[A-Za-z]开头。
使用冒号和句点需要更多的工作,但您可以按照以下示例进行操作。
<html>
<head>
<title>Cake</title>
<style type="text/css">
#i\.Really\.Like\.Cake {
color: green;
}
#i\:Really\:Like\:Cake {
color: blue;
}
</style>
</head>
<body>
<div id="i.Really.Like.Cake">Cake</div>
<div id="testResultPeriod"></div>
<div id="i:Really:Like:Cake">Cake</div>
<div id="testResultColon"></div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var testPeriod = $("#i\\.Really\\.Like\\.Cake");
$("#testResultPeriod").html("found " + testPeriod.length + " result.");
var testColon = $("#i\\:Really\\:Like\\:Cake");
$("#testResultColon").html("found " + testColon.length + " result.");
});
</script>
</body>
</html>
<input id="me.name" />
,然后调用$("#me.name").val()
,jQuery 将会寻找一个类为.name
的<me>
标签,而这并不是我们想要的结果!请谨慎使用。 - Can O' Spam