Какие правила существуют для значения при создании атрибутов id
для элементов HTML?
26 ответов
Технически ответ для HTML 4:
Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисами ("-"), подчеркиванием ("_"). , двоеточия (":") и точки (".").
HTML 5 еще более либерален, говоря только о том, что id должен содержать хотя бы один символ и не может содержать пробелов.
Атрибут id чувствителен к регистру в XHTML.
С чисто практической точки зрения вы можете избегать некоторых символов. Точки, двоеточия и '#' имеют особое значение в селекторах CSS, поэтому вам придется экранировать эти символы, используя обратная косая черта в CSS или двойная обратная косая черта в строка селектора, переданная в jQuery. Подумайте, как часто вам придется экранировать символ в таблицах стилей или коде, прежде чем вы сойдете с ума от точек и двоеточий в идентификаторах.
Например, декларация HTML <div id="first.name"></div>
действительна. Вы можете выбрать этот элемент в CSS как #first\.name
, а в jQuery так: $('#first\\.name').
Но если вы забудете обратную косую черту, $('#first.name')
, у вас будет совершенно допустимый селектор, ищущий элемент с идентификатором first
, а также имеющий класс name
. Эту ошибку легко не заметить. В конечном итоге вы могли бы быть более счастливы, выбрав вместо этого идентификатор first-name
(дефис, а не точку).
Вы можете упростить задачи разработки, строго придерживаясь соглашения об именах. Например, если вы полностью ограничиваете себя строчными буквами и всегда разделяете слова либо дефисами, либо символами подчеркивания (но не обоими сразу, выбирайте одно и никогда не используйте другое), тогда у вас есть легко запоминающийся шаблон. Вы никогда не задаетесь вопросом, "это было firstName
или FirstName
?" потому что вы всегда будете знать, что вам следует ввести first_name
. Предпочитаете верблюжий футляр? Затем ограничьтесь этим, никаких дефисов или подчеркиваний, и всегда последовательно используйте верхний или нижний регистр для первого символа, не смешивайте их.
Теперь очень неясная проблема заключалась в том, что по крайней мере один браузер, Netscape 6, неправильно обрабатывал значения атрибутов id как с учетом регистра. Это означало, что если бы вы набрали id="firstName"
в своем HTML (строчная буква «f») и #FirstName { color: red }
в своем CSS (заглавная буква «F»), этот ошибочный браузер не смог бы установить цвет элемента на красный. На момент редактирования, апрель 2015 года, я надеюсь, что вас не просят поддержать Netscape 6. Считайте это исторической сноской.
Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисами ("-"), подчеркиванием ("_"). , двоеточия (":") и точки (".").
Распространенной ошибкой является использование идентификатора, начинающегося с цифры.
JQuery не обрабатывает любое допустимое имя идентификатора. Вам просто нужно экранировать метасимволы (например, точки, точки с запятой, квадратные скобки ...). Это все равно что сказать, что у JavaScript проблема с кавычками только потому, что вы не можете писать
var name = 'O'Hara';
Селекторы в jQuery API (см. Нижнее примечание)
Строго должно соответствовать
[A-Za-z][-A-Za-z0-9_:.]*
Но у jquery, похоже, есть проблемы с двоеточиями, поэтому их лучше избегать.
HTML5 :
Избавляется от дополнительных ограничений на атрибут id см. здесь. Единственные оставшиеся требования (помимо уникальности в документе):
- значение должно содержать хотя бы один символ (не может быть пустым)
- он не может содержать пробелов.
PRE-HTML5:
Идентификатор должен совпадать:
[A-Za-z][-A-Za-z0-9_:.]*
- Должны начинаться с символов A-Z или a-z
- Может содержать
-
(дефис),_
(подчеркивание),:
(двоеточие) и.
(точка)
Но следует избегать :
и .
, потому что:
Например, идентификатор может быть помечен как «ab: c» и на него можно ссылаться в таблице стилей как #ab: c, но помимо идентификатора элемента он может означать id «a», класс «b», псевдо- селектор "с". Лучше всего избегать путаницы и держаться подальше от использования. и: в целом.
id="c365720c"
HTML5: допустимые значения для атрибутов идентификатора и класса
Начиная с HTML5, единственные ограничения на значение идентификатора:
- должен быть уникальным в документе
- не должно содержать пробелов
- должен содержать хотя бы один символ
Аналогичные правила применяются к классам (за исключением, конечно, уникальности).
Таким образом, значение может быть все цифры, только одна цифра, только знаки пунктуации, включая специальные символы, что угодно. Просто без пробелов. Это очень отличается от HTML4.
В HTML 4 значения идентификаторов должны начинаться с буквы, за которой могут следовать только буквы, цифры, дефисы, подчеркивания, двоеточия и точки.
В 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>
Просто помните, что использование цифр, знаков препинания или специальных символов в значении идентификатора может вызвать проблемы в других контекстах (например, CSS, JavaScript, regex).
Например, в HTML5 действителен следующий идентификатор:
<div id="9lions"> ... </div>
Однако он недопустим в CSS:
Из спецификации CSS2.1:
В CSS идентификаторы (включая имена элементов, классы и идентификаторы в селекторы) могут содержать только символы [a-zA-Z0-9] и ISO 10646 символы U + 00A0 и выше, плюс дефис (-) и подчеркивание (_); они не могут начинаться с цифры, двух дефисов или дефиса за которым следует цифра .
В большинстве случаев вы можете экранировать символы в контекстах, где они имеют ограничения или особое значение.
Ссылки W3C
HTML5
Атрибут
id
определяет уникальный идентификатор (ID) своего элемента.Значение должно быть уникальным среди всех идентификаторов в домашнем поддереве элемента и должно содержать хотя бы один символ. Значение не должно содержать пробелов.
Примечание. Других ограничений относительно формы идентификатора нет; в частности, идентификаторы могут состоять только из цифр, начинаться с цифры, начинаться с символа подчеркивания, состоять только из знаков препинания и т. д.
Атрибут, если он указан, должен иметь значение, которое представляет собой набор разделенных пробелами токенов, представляющих различные классы, к которым принадлежит элемент.
Классы, присвоенные ему элементом HTML, состоят из всех классов, возвращаемых, когда значение атрибута class разбивается на пробелы. (Дубликаты игнорируются.)
Нет никаких дополнительных ограничений на то, что авторы токенов могут использовать в атрибуте class, но авторам рекомендуется использовать значения, описывающие характер контента, а не значения, описывающие желаемое представление контента.
На практике многие сайты используют атрибуты id
, начинающиеся с цифр, хотя технически это недопустимый HTML.
черновик спецификации HTML 5 смягчает правила для id
и атрибуты name
: теперь они представляют собой просто непрозрачные строки, которые не могут содержать пробелов.
Дефисы, подчеркивания, точки, двоеточия, числа и буквы допустимы для использования с 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>
HTML5
Помня, что ID должен быть уникальным, т.е. в документе не должно быть нескольких элементов с одинаковым значением id.
Правила относительно содержания ID в HTML5 (помимо уникальности) следующие:
This attribute's value must not contain white spaces. [...]
Though this restriction has been lifted in HTML 5,
an ID should start with a letter for compatibility.
Это спецификация W3 об идентификаторе (от MDN):
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
<div id="maintenance.instrumentNumber">############0218</div>
CSS
#maintenance\.instrumentNumber{word-wrap:break-word;}
\--abc
) или цифрой (например, \-123
).
Из спецификации HTML 4 ...
Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисами ("-"), подчеркиванием ("_"). , двоеточия (":") и точки (".").
РЕДАКТИРОВАТЬ: ооо! Опять же, до кнопки!
Кроме того, никогда не забывайте, что идентификатор уникален. После использования значение идентификатора может больше не появляться в документе.
У вас может быть много идентификаторов, но все они должны иметь уникальное значение.
С другой стороны, есть класс-элемент. Как и ID, он может появляться много раз, но значение можно использовать снова и снова.
Для HTML5
Значение должно быть уникальным среди всех идентификаторов в домашнем поддереве элемента и должно содержать хотя бы один символ. Значение не должно содержать пробелов.
Хотя бы один символ, без пробелов.
Это открывает двери для допустимых вариантов использования, таких как использование символов с диакритическими знаками. Это также дает нам гораздо больше боеприпасов, чтобы выстрелить себе в ногу, поскольку теперь вы можете использовать значения id, которые вызовут проблемы как с CSS, так и с JavaScript, если вы не будете очень осторожны.
- Идентификаторы лучше всего подходят для именования частей вашего макета, поэтому не должны давать одно и то же имя для идентификатора и класса.
- ID допускает буквенно-цифровые и специальные символы
- но избегайте использования символов
# : . * !
- недопустимые пробелы
- не начинается с цифр или дефиса, за которым следует цифра
- деликатный случай
- использование селекторов идентификаторов быстрее, чем использование селекторов классов
- используйте дефис "-" (знак подчеркивания "_" также можно использовать, но не подходит для поисковой оптимизации) для длинных имен классов CSS или правил идентификатора.
- Если в правиле есть селектор идентификаторов в качестве селектора ключей, не добавляйте имя тега в правило. Поскольку идентификаторы уникальны, добавление имени тега без необходимости замедлит процесс сопоставления.
- В HTML5 атрибут id можно использовать в любом элементе HTML, а в HTML 4.01 атрибут id нельзя использовать с:
<base>, <head>, <html>, <meta>, <param>, <script>, <style>, and <title>.
Допустимо любое буквенно-цифровое значение , а также « - » и « _ ». Но вы должны начинать имя идентификатора с любого символа между A-Z или a-z .
Без пробелов, должно начинаться как минимум с символа от a до z и от 0 до 9.
Значения могут быть: [a-z], [A-Z], [0-9], [* _: -]
Он используется для HTML5 ...
Мы можем добавить id с любым тегом.
В HTML
ID должен начинаться с {AZ} или {az} , вы можете добавить цифры, точку, дефис, подчеркивание, двоеточие. сильный>
Например:
<span id="testID2"></span>
<span id="test-ID2"></span>
<span id="test_ID2"></span>
<span id="test:ID2"></span>
<span id="test.ID2"></span>
Но даже несмотря на то, что вы можете создать идентификатор с двоеточием (:) или точкой (.), Для CSS сложно использовать этот идентификатор в качестве селектора. В основном, когда вы хотите использовать псевдоэлементы (: до,: после).
Также в JS трудно выбрать эти идентификаторы. Таким образом, вы должны использовать первые четыре идентификатора. Как предпочитают многие разработчики, и, если это необходимо, вы также можете использовать последние два.
Начиная с ES2015 , мы можем также использовать -почти- все символы Юникода для идентификаторов, если кодировка документа установлена на UTF8.
Протестируйте здесь: https://mothereff.in/js-variables
Читайте о: https://mathiasbynens.be/notes/javascript-identifiers-es6
В ES2015 идентификаторы должны начинаться с $, _ или любого символа с производным от Unicode основным свойством ID_Start.
Остальная часть идентификатора может содержать $, _, U + 200C, не соединяющий нулевую ширину, U + 200D, соединяющий нулевую ширину, или любой символ с производным от Unicode основным свойством ID_Continue.
const target = document.querySelector("div").id
console.log(
target
)
document.getElementById(target).style.backgroundColor = "black"
div {
border: 1px black solid;
width: 100%;
height: 200px
}
<div id="H̹̙̦̮͉̩̗̗ͧ̇̏̊̾Eͨ͆͒̆ͮ̃͏̷̮̣̫̤̣Cͯ̂͐͏̨̛͔̦̟͈̻O̜͎͍͙͚̬̝̣̽ͮ͐͗̀ͤ̍̀͢M̴̡̲̭͍͇̼̟̯̦̉̒͠Ḛ̛̙̞̪̗ͥͤͩ̾͑̔͐ͅṮ̴̷̷̗̼͍̿̿̓̽͐H̙̙̔̄͜">
Стоит ли его использовать? Наверное, не лучшая идея!
Читайте о: https://stackoverflow.com/a/52799593/2494754
Помогите, мой Javascript сломан!
Все говорят, что идентификаторы не могут быть дублированы.
Лучше всего пробовать во всех браузерах, кроме FireFox.
<div id="ONE"></div>
<div id="ONE"></div>
<div id="ONE"></div>
<script>
document.body.append( document.querySelectorAll("#ONE").length , ' DIVs!')
document.body.append( ' in a ', typeof ONE )
console.log( ONE );
</script>
Идентификатор HTML
Атрибут id указывает уникальный идентификатор своего элемента (ID).
Других ограничений на то, какую форму может принимать идентификатор, нет; в частности, идентификаторы могут состоять только из цифр, начинаться с цифры, начинаться с подчеркивания, состоять только из знаков препинания и т. д.
Уникальный идентификатор элемента может использоваться для различных целей, в первую очередь как способ ссылки на определенные части документа с помощью фрагментов, как способ нацеливания на элемент при написании сценария и как способ стилизовать определенный элемент из CSS. .
- Работают прописные и строчные буквы
- '_' и '-' тоже работают
- Числа работает
- Двоеточие (,) и точка (.), Кажется, работают
- Интересно, что смайлы работают
Алфавиты-> заглавные и маленькие
цифры-> 0-9
специальные символы-> ':', '-', '_', '.'
Формат должен начинаться с "." или алфавит, за которым следует любой из специальных символов других алфавитов или чисел. значение поля id не должно заканчиваться на "_".
Также не допускаются пробелы, если они указаны, они рассматриваются как разные значения, что недопустимо в случае атрибутов id.
Технически вы можете использовать двоеточия и точки в атрибутах id / name, но я настоятельно рекомендую избегать обоих.
В CSS (и некоторых библиотеках JavaScript, таких как jQuery) точка и двоеточие имеют особое значение, и вы столкнетесь с проблемами, если не будете осторожны. Точки - это селекторы классов, а двоеточия - псевдоселекторы (например, «: hover» для элемента, когда на него наведена мышь).
Если вы дадите элементу идентификатор «my.cool:thing», ваш селектор CSS будет выглядеть так:
#my.cool:thing { ... /* some rules */ ... }
Что на самом деле означает «элемент с идентификатором« мой », класс« круто »и псевдоселектор« вещь »» на языке CSS.
В любом регистре, числах, знаках подчеркивания и дефисах придерживайтесь А-Я. И, как сказано выше, убедитесь, что ваши идентификаторы уникальны.
Это должно быть вашей первой заботой.
Уникальный идентификатор элемента.
В документе не должно быть нескольких элементов с одинаковым значением id.
Любая строка со следующими ограничениями:
- должен быть длиной не менее одного символа
не должно содержать пробелов:
- U + 0020 ПРОСТРАНСТВО
- ТАБЛИЦА ПЕРСОНАЖЕЙ U + 0009 (вкладка)
- ЛИНИЯ ПОДАЧИ U + 000A (LF)
- ПОДАЧА ФОРМЫ U + 000C (FF)
- ВОЗВРАТ ПЕРЕВОЗКИ U + 000D (CR)
Использование символов, кроме ASCII letters and digits, '_', '-' and '.'
, может вызвать проблемы совместимости, поскольку они не разрешены в HTML 4
. Хотя это ограничение было снято в HTML 5
, для совместимости идентификатор должен начинаться с буквы.
Похоже, что хотя двоеточия (:) и точки (.) Допустимы в спецификации HTML, они недопустимы в качестве селекторов идентификаторов в CSS, поэтому, вероятно, лучше избегать, если вы собираетесь использовать их для этой цели.
Похожие вопросы
Новые вопросы
html
HTML (язык разметки гипертекста) - это язык разметки для создания веб-страниц и другой информации, отображаемой в веб-браузере. Вопросы, касающиеся HTML, должны включать минимальный воспроизводимый пример и некоторое представление о том, чего вы пытаетесь достичь. Этот тег редко используется отдельно и часто используется вместе с [CSS] и [javascript].
ID
сильно различаются. Вот краткое и полное изложение правил HTML5ID
: stackoverflow.com/a/31773673/3597276**.**)
с jQuery вызовет у вас немало проблем, например, использование<input id="me.name" />
, а затем$("#me.name").val()
будет заставит jQuery искать тег<me>
с классом.name
, чего на самом деле никто не хочет!