我能否创建一个具有以数字开头或完全为数字的 id
属性的元素?
例如这样的:
<div id="12"></div>
我能否创建一个具有以数字开头或完全为数字的 id
属性的元素?
例如这样的:
<div id="12"></div>
我可以拥有一个ID为数字的div吗?
可以,但是用CSS选择器选择/样式化它会很麻烦。
id
值如果仅由数字组成,在 HTML 中是完全有效的;除了空格以外的任何字符都可以。尽管早期的 HTML 规范更加严格(规范1,规范2),要求使用一小组字符并以字母开头,但浏览器从来没有在意过,这也是 HTML5 规范放开限制的重要原因之一。
如果你要使用这些 id
与 CSS 选择器配合使用(例如,用 CSS 对其进行样式化,或者使用 querySelector
、querySelectorAll
或像 jQuery 这样使用 CSS 选择器的库来定位它们),请注意会很麻烦,如果可能最好以字母开头,因为你不能直接在 CSS id
选择器中使用以数字开头的 id
(需要进行转义)。(例如,#12
是无效的 CSS 选择器;必须写成 #\31\32
)。因此,如果您将与 CSS 选择器一起使用它,最好从字母开始。
以上链接按清晰度列出:
下面是一个使用 id
为“12”的 div
并用三种方式处理它的示例:
document.getElementById
使用 JavaScriptdocument.querySelector
(适用于支持它的浏览器)使用 JavaScript它可以在我测试过的所有浏览器上运行(请参见代码下方的列表)。实时示例:
"use strict";
document.getElementById("12").style.border = "2px solid black";
if (document.querySelector) {
document.querySelector("#\\31\\32").style.fontStyle = "italic";
display("The font style is set using JavaScript with <code>document.querySelector</code>:");
display("document.querySelector(\"#\\\\31\\\\32\").style.fontStyle = \"italic\";", "pre");
} else {
display("(This browser doesn't support <code>document.querySelector</code>, so we couldn't try that.)");
}
function display(msg, tag) {
var elm = document.createElement(tag || 'p');
elm.innerHTML = String(msg);
document.body.appendChild(elm);
}
#\31\32 {
background: #0bf;
}
pre {
border: 1px solid #aaa;
background: #eee;
}
<div id="12">This div is: <code><div id="12">...</div></code>
</div>
<p>In the above:</p>
<p>The background is set using CSS:</p>
<pre>#\31\32 {
background: #0bf;
}</pre>
<p>(31 is the character code for 1 in hex; 32 is the character code for 2 in hex. You introduce those hex character sequences with the backslash, <a href="http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier">see the CSS spec</a>.)</p>
<p>The border is set from JavaScript using <code>document.getElementById</code>:</p>
<pre>document.getElementById("12").style.border = "2px solid black";</pre>
#\31\32
这样的选择器很难阅读。id
。我稍微重新表述了一下,以便A)更加清晰,B)不那么教条主义。 - T.J. Crowder从HTML 5规范中...
id属性指定元素的唯一标识符(ID)。[DOM]
该值在元素所在的主子树中必须是唯一的,且必须至少包含一个字符。该值不能包含任何空格字符。
对ID可以采取任何形式,特别是ID可以仅由数字组成,以数字开头,以下划线开头,仅由标点符号组成等等。
元素的唯一标识符可用于多种目的,最重要的是作为使用片段标识符链接文档特定部分的方法,作为脚本时针对元素的方法以及作为CSS样式化特定元素的方法。
标识符是不透明的字符串。不应从id属性的值中得出特定含义。
因此... 是的 :)
从HTML 4.01规范中...
ID必须以字母([A-Za-z])开头,可以后跟任意数量的字母、数字([0-9])、连字符(“-”)、下划线(“_”)、冒号(“:”)和句点(“.”)。
所以...不行 :(
document.querySelector('div[id="12"]'); //or
document.querySelectorAll('div[id="12"]'); //if you have multiple elements with equal ID.
从可维护性的角度来看,这是一个不好的想法。ID应该至少在一定程度上描述它们所代表的内容。请在前面加上一些有意义的前缀,以便符合其他人已经给出的答案。例如:
<div id ="phoneNumber_12" > </div>
TJ Crowder的答案在概念上是好的,但对于后代CSS选择器却不起作用。
然而,仅转义后跟空格的第一个字符确实有效(在Chrome 49中)
假设以下HTML片段:
<td id="123456">
<div class="blah">
<div class="yadah">play that funky music</div>
</div>
</td>
document.querySelector("#\\31 23456 .blah .yadah").style.fontStyle = "italic";
正确显示播放那首时髦的音乐
正如其他回答所指出的那样,从技术上讲,答案是:
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 (".").
然而,实际上,如果您希望您的文档能够与各种浏览器、CSS编辑器和JavaScript框架一起使用,那么您将受到一定限制。
正如其他回答中所指出的那样,jQuery在包含句点和冒号的id方面存在问题。
更微妙的问题是,一些浏览器会错误地将id属性值视为区分大小写。这意味着,如果您在HTML中键入id="firstName"(小写'f'),并在CSS中键入.FirstName { color: red }(大写'F'),有些有缺陷的浏览器将不会将元素的颜色设置为红色。因为两个定义都使用了id的有效字符,所以您将不会从验证工具中收到任何错误信息。
您可以通过严格遵守命名约定来避免这些问题。例如,如果您完全限制自己只使用小写字符,并始终使用连字符或下划线分隔单词(但不要同时使用两者,选择其中一个并永远不要使用另一个),那么您就有了一个易于记忆的模式。您永远不会想知道“是firstName还是FirstName?”因为您总是知道应该键入first_name。
同样的问题已经被问过了
a1
或theansweris42
。