Какие допустимые значения для атрибута id в HTML?

Какие правила существуют для значения при создании атрибутов id для HTML-элементов?

Это отличается между HTML5 и предыдущими версиями спецификации. Я объяснил это здесь: mathiasbynens.be/notes/html5-id-class

Mathias Bynens 24.10.2011 12:41

Я заметил, что SharePoint 2010 присваивает такое значение - {8CC7EF38-31D8-4786-8C20-7E6D56E49AE2} - {E60CE5E2-6E64-4350-A‌ 884-654B72DA5A53} для динамически сгенерированной таблицы в веб-части и страницы, содержащей идентификатор. такого рода значение не нарушается ни в одном из популярных браузеров. Однако работать с такими значениями идентификаторов через JavaScript сложно - mvark.blogspot.in/2012/07/…

mvark 20.07.2012 22:34

Требования HTML4 и HTML5 для значений ID сильно различаются. Вот краткое и полное изложение правил HTML5 ID: stackoverflow.com/a/31773673/3597276

Michael Benjamin 03.08.2015 03:32

Обратите внимание: выполнение того, что сказано в некоторых ответах, и использование точки (**.**) с jQuery вызовет у вас немало проблем, например, использование <input id = "me.name" />, а затем $("#me.name").val() приведет к тому, что jQuery будет искать тег <me> с классом .name , чего на самом деле никто не хочет!

Can O' Spam 26.08.2015 18:20

@SamSwift 웃 Нет, вам просто нужно экранировать специальные символы как документы говорят. Пожалуйста, проверьте это онлайн-демонстрация.

Álvaro González 10.11.2016 12:58

Я знаю, что OP спрашивает о создании действительных идентификаторов (а не о том, как выполнить jQuery для существующей DOM), но нижеприведенный комментарий @ Faust будет так полезен для других, которые, возможно, искали в Google это так же, как и я. Используя его технику: я смог успешно запросить такие элементы (с пробелом): <div id = "Usr_order #">..., используя оператор jQuery, подобный этому: $([id='Usr_order #'])

bkwdesign 24.02.2017 17:04

GUID @mvark - это популярно, но я обнаружил, что использование GUID в кодировке base64 еще более актуально. 0dea65ca-eac3-489a-944c-0c522b609f78 компактно представлен как ymXqDcPqmkiUTAxSK2CfeA.

Dmitry 16.06.2018 19:46
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2 095
7
472 100
24
Перейти к ответу Данный вопрос помечен как решенный

Ответы 24

Из Спецификация HTML 4:

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 позволяет гораздо больше, чем HTML4, например 456bereastreet.com/archive/201011/… и w3.org/TR/html5/elements.html#the-id-attribute

Mr Shark 30.11.2010 11:33

IE6 не поддерживает идентификаторы, начинающиеся с подчеркивания, но в любом случае он мертв.

doc_id 03.03.2012 16:00

@rahmanisback относительно IE6, можно было бы так подумать, но я сейчас заканчиваю предложение для банка, и они настаивают, чтобы любое приложение, разрабатываемое поставщиком, работало в IE6. Это для 30 000 пользователей. Черт возьми, если бы мы могли просто заставить их обновлять свои браузеры на всех этих настольных компьютерах, это могло бы просто улучшить уровень безработицы.

Karl 13.09.2012 17:50

@ Карл, мне жаль это слышать. Сделайте все возможное, чтобы предупредить о проблемах безопасности IE6. Однако IE7 скоро станет новым IE6, так что да, похоже, наша судьба в этой отрасли - исправить прошлые ошибки MS.

doc_id 14.09.2012 10:25

@MrShark Вторая ссылка не работает; Новая ссылка

SWdV 14.06.2015 17:34

Строго должно соответствовать

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

Но у jquery, похоже, есть проблемы с двоеточиями, поэтому их лучше избегать.

Или, как вариант: «так что лучше избегать jquery». ;)

domsson 11.01.2020 16:52

Из спецификации HTML 4 ...

Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисами ("-"), подчеркиванием ("_"). , двоеточия (":") и точки (".").

Обновлено: ооо! Опять же, до кнопки!

На практике многие сайты используют атрибуты id, начинающиеся с цифр, хотя технически это недопустимый HTML.

HTML 5 черновик спецификации ослабляет правила для атрибутов id и name: теперь они представляют собой просто непрозрачные строки, которые не могут содержать пробелов.

Кроме того, никогда не забывайте, что идентификатор уникален. После использования значение идентификатора может больше не появляться в документе.

У вас может быть много идентификаторов, но все они должны иметь уникальное значение.

С другой стороны, есть класс-элемент. Как и ID, он может появляться много раз, но значение можно использовать снова и снова.

Технически вы можете использовать двоеточия и точки в атрибутах id / name, но я настоятельно рекомендую избегать обоих.

В CSS (и некоторых библиотеках JavaScript, таких как jQuery) точка и двоеточие имеют особое значение, и вы столкнетесь с проблемами, если не будете осторожны. Точки - это селекторы классов, а двоеточия - псевдоселекторы (например, «: hover» для элемента, когда на него наведена мышь).

Если вы дадите элементу идентификатор «my.cool:thing», ваш селектор CSS будет выглядеть так:

#my.cool:thing { ... /* some rules */ ... }

Что на самом деле означает «элемент с идентификатором« мой », класс« круто »и псевдоселектор« вещь »» на языке CSS.

В любом регистре, числах, знаках подчеркивания и дефисах придерживайтесь А-Я. И, как сказано выше, убедитесь, что ваши идентификаторы уникальны.

Это должно быть вашей первой проблемой.

Вы можете использовать двоеточия и точки, но вам нужно будет экранировать их, используя двойную обратную косую черту, например: $ ('# my \\. Cool \\: thing') или экранирование переменной: $ ('#' + id.replace (/ \ ./, '\\.'). replace (/ \: /, '\\:')) groups.google.com/group/jquery-en/browse_thread/thread/…

joeformd 03.12.2009 13:41

Почему не цифры; почему только А-Я? Числа являются очень полезными идентификаторами при обращении к элементам, связанным с данными, содержащими номер, если вы не начинаете с номера.

cori 02.05.2011 20:35

Просто к вашему сведению, тире находятся технически дефисы. Знак минус отсутствует в наборе символов ASCII. en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes

Anton Strogonoff 08.07.2011 22:31

@jowformd: интересная идея с использованием замены в селекторе вместо использования функции дважды, почему бы просто не улучшить регулярное выражение id.replace(/([\.:])/g,"\")

vol7ron 18.10.2011 20:57

Если у вас есть эти символы (., :) в идентификаторах, и вы не можете их удалить (кашля ... Sharepoint), вы можете обойти это в CSS с помощью селекторов атрибутов вместо селекторов идентификаторов, например [id='my.cool:thing'], однако этот селектор будет иметь более низкую специфичность, чем селектор id, что может вызвать другие проблемы.

Faust 07.06.2013 11:36

Старый, я знаю, но обновленный: теперь в нем добавлены числа и дефисы.

Michael Thompson 30.12.2013 19:03
Ответ принят как подходящий

Для HTML 4 технически ответ:

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 (".").

HTML 5 еще более либерален, говоря только о том, что идентификатор должен содержать хотя бы один символ и не может содержать никаких пробелов.

Атрибут 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. Считайте это исторической сноской.

Обратите внимание, что атрибуты class и id находятся чувствительны к регистру в XHTML, а все остальные атрибуты - нет. Эрик Мейер упомянул об этом на семинаре по CSS, который я посетил.

John Topley 22.04.2009 14:35

Также обратите внимание, что если вы попытаетесь написать правило CSS для нацеливания на элемент по идентификатору, а идентификатор будет иметь номер, это не сработает. Облом!

Zack The Human 20.01.2010 03:53

Что касается '.' или ':' в идентификаторе, использующем jQuery, см. jQuery Часто задаваемые вопросы. Он содержит небольшую функцию, которая выполняет необходимое экранирование.

Wolfram 06.05.2010 14:18

Атрибут id [w3.org/TR/html4/struct/global.html#adef-id visible(case чувствителен в HTML4) и должен начинаться с буквы (от A до Z). Также обратите внимание, что ваш пример не должен делать цвет текста вашего элемента красным, поскольку ваш CSS относится к элементу с классом FirstName, а не к вашему id.

Augustus Kling 30.09.2011 11:55

Я только что обновил ответ, включив в него упоминание о более разрешительных правилах HTML 5, и исправил эту ошибку в моем примере CSS. Всем спасибо за комментарии!

dgvid 30.09.2011 17:36

Ошибка, на которую указал Август, все еще существует. В вашем примере, если у вас есть id = "firstName" в HTML 4 или HTML 5 и #FirstName { color: red } в CSS, только браузер с ошибками устанавливает красный цвет элемента.

Stephen Booher 26.01.2012 21:15

На самом деле идентификаторы в HTML / XML не ограничиваются только буквами ASCII, цифрами, дефисами и символами подчеркивания. Все остальные латинские буквы также действительны (например, "Café" - действительный идентификатор HTML / XML). И на самом деле вы можете использовать буквы любого алфавита любого простого алфавитного письма (например, греческие, кириллические, армянские или грузинские буквы).

verdy_p 21.03.2012 18:43

Фактически, вы можете использовать буквы любого алфавита любого простого алфавитного письма (например, греческие, кириллические, армянские или грузинские буквы), или слоговые (например, японские кан), или синограммы. Вы также можете включать комбинирующие символы (например, точку на иврите) в свои идентификаторы (но не в качестве их первого символа), а также другие объединяющие символы Unicode (такие как ZWJ и ZWNJ) (только перед другой буквой, но не в начале идентификатор).

verdy_p 21.03.2012 18:47

Также принимаются цифры для других шрифтов (например, цифры Деванагари). Допускаются также некоторые другие дефисы (например, арабский Кашида). Не допускаются только буквы и цифры, определенные как символы совместимости (например, контекстные варианты и варианты форм). Вы также можете вставить. Прочтите спецификации XML и HTML о том, какие буквенные сценарии являются приемлемыми.

verdy_p 21.03.2012 18:49

Допустимые символы: ":" | [А-Я] | "_" | [а-я] | [# xC0- # xD6] | [# xD8- # xF6] | [# xF8- # x2FF] | [# x370- # x37D] | [# x37F- # x1FFF] | [# x200C- # x200D] | [# x2070- # x218F] | [# x2C00- # x2FEF] | [# x3001- # xD7FF] | [# xF900- # xFDCF] | [# xFDF0- # xFFFD] | [# x10000- # xEFFFF]

verdy_p 21.03.2012 20:24

Все эти символы могут встречаться где угодно в продукте «Имя», которому должен подчиняться тип идентификатора. Однако первый символ более ограничен, и следующие дополнительные символы могут встречаться только начиная со второго символа: «-» | "." | [0-9] | # xB7 | [# x0300- # x036F] | [# x203F- # x2040]

verdy_p 21.03.2012 20:27

Некоторые из этих символов обычно запрещены буквально в селекторах CSS и должны быть экранированы (это случай точки '.'

verdy_p 21.03.2012 20:28

Это также означает, что также можно использовать многие знаки препинания и символы (например, символ евро «€», U + 20AC, попадает в список символов, разрешенных везде в идентификаторе, поэтому «€» является допустимым идентификатором, но не $ ', который действителен в идентификаторах Javascript, но не в идентификаторах HTML / XML!)

verdy_p 21.03.2012 20:33

Обратите внимание, что вы также можете использовать ссылки на символы в идентификаторе: "& # x41;" действует так же, как "А". Также обратите внимание, что символы все в дополнительных плоскостях, кроме плоскостей PUA, действительны. Это также означает, что идентификатор '& # x10FFFF;' является допустимым, даже если документ HTML / XML не может быть закодирован как простой текст, если вы замените ссылку на символ его буквальным символом: документ больше не будет простым текстом, потому что он содержит «несимвольный».

verdy_p 21.03.2012 20:38

Также обратите внимание, что идентификаторы не обязательно должны быть в нормальной канонической форме: даже если два идентификатора канонически эквивалентны (они имеют одинаковую форму NFC), они считаются различающимися. XML и HTML выполняют нет нормализацию имен текстовых элементов, имен атрибутов, идентификаторов, токенов имен, значений атрибутов любого типа и содержимого текстовых элементов.

verdy_p 21.03.2012 20:52

Вы заметите, что обычное комбинирование символов в диапазоне [# x0300- # x036F] не допускается в начале идентификатора, но разрешено комбинирование символов и элементов управления форматом многих скриптов. Таким образом, идентификатор, состоящий только из комбинированного акцента, недействителен, но идентификатор, состоящий только из комбинированного арабского сукуна, действителен, даже если он не имеет смысла на арабском языке !!!

verdy_p 21.03.2012 20:54

Наконец, обратите внимание, что эти ограничения были необходимы для совместимости с XHTML, то есть, наконец, с XML. Но в HTML5 совместимость с XML и XHTML не требуется, и фактически HTML5 даже не содержит элементов, требующих использования пространства имен «xml:» или любого другого пространства имен. В HTML5 стандартный атрибут «id» теперь просто непрозрачная строка без каких-либо других ограничений, кроме отсутствия пробелов. Итак, атрибут id = "Хорошего дня!" совершенно корректно в HTML5, но будет недействительным в XHTML из-за неразрывного пробела и кавычек ...

verdy_p 21.03.2012 21:19

Чтобы селекторы работали в jQuery, для некоторых символов все, что вам нужно сделать, это добавить «\\» (2 косые черты) непосредственно перед проблемным символом. Вот ссылка на escape-функцию для точек и двоеточий в селекторе jquery: learn.jquery.com/using-jquery-core/faq/…, а вот функция function jq( myid ) {return "#" + myid.replace( /(:|\.|\[|\])/g, "\" );}

Buttle Butkus 15.11.2014 02:12

Есть ли ограничение по длине?

Tomáš Zato - Reinstate Monica 02.12.2014 01:43

@dgvid, будет ли браузер выдавать ошибку, если синтаксис для атрибута id нарушен?

Kira 08.01.2015 14:07

Каждый браузер может обрабатывать недопустимый идентификатор по-своему. Как правило, браузеры стараются прощать синтаксические ошибки, поэтому недопустимый идентификатор может каким-то образом нарушить работу страницы, но не даст никаких других указаний на ошибку.

dgvid 08.01.2015 23:00
«Однако с практической точки зрения вы будете несколько более ограничены, если хотите, чтобы ваши документы работали с различными браузерами, редакторами CSS и фреймворками JavaScript». Citation? Examples? Что browsers? Что editors? «Как отмечалось в других ответах, jQuery имеет проблемы с идентификаторами, содержащими точки и двоеточия». Does it? What problems? jQuery works with correct CSS selectors, and correct CSS selectors can select elements with all-numeric ids (you just have to escape them correctly, which is defined in CSS). What "problems" are you talking about?
T.J. Crowder 31.03.2015 00:49

Имейте в виду, что #3d { background:red; } не будет работать (следовательно, не используйте идентификатор, начинающийся с числа, если вы хотите его стилизовать).

thdoan 27.04.2015 06:31

Я предпочитаю first-name.

Oliver Ni 12.08.2017 12:33

просто с точки зрения удобства, вы можете выделить текст first_name двойным щелчком, но не first-name

XoXo 07.02.2018 18:06

@ 10basetom Вы всегда можете избежать первого символа: d.

Mr Lister 26.02.2018 17:26

Фраза «вам придется экранировать эти символы, используя обратную косую черту в CSS или двойную обратную косую черту в строке селектора, передаваемой в jQuery» выглядит сбивающей с толку. Сначала я подумал, что jquery действительно требует двойной косой черты, но на самом деле это всегда одинарная косая черта. Двойная косая черта в строке JS требуется только потому, что в строках JS косая черта также является escape-символом, поэтому для создания селектора css из строки JS необходимо экранировать косую черту JS, чтобы получить одну косую черту для селектора CSS. console.info('\#') действительно печатает \#.

Ruslan Stelmachenko 19.06.2019 00:28

jQuery делает обрабатывает любое допустимое имя ID. Вам просто нужно экранировать метасимволы (например, точки, точки с запятой, квадратные скобки ...). Это все равно, что сказать, что у JavaScript проблемы с кавычками только потому, что вы не можете писать

var name = 'O'Hara';

Селекторы в jQuery API (см. Нижнее примечание)

Похоже, что хотя двоеточия (:) и точки (.) Допустимы в спецификации HTML, они недействительны как селекторы идентификаторов в CSS, поэтому, вероятно, лучше избегать их, если вы собираетесь использовать их для этой цели.

@MathiasBynens Ссылка не работает. Теперь это mothereff.in/css-escapes#0foo%23bar.baz%3Aqux

Oriol 08.11.2014 22:52

Они не являются недействительными, если вы правильно их избегаете. См. mothereff.in/css-escapes#0foo%23bar.baz%3Aqux

Mathias Bynens 10.11.2014 10:09

Дефисы, подчеркивания, точки, двоеточия, числа и буквы допустимы для использования с 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>

алфавиты-> заглавные и маленькие цифры-> 0-9
специальные символы-> ':', '-', '_', '.'

формат должен начинаться с "." или алфавит, за которым следует любой из специальных символов других алфавитов или чисел. значение поля id не должно заканчиваться на "_".
Также не допускаются пробелы, если они указаны, они обрабатываются как разные значения, что недопустимо в случае атрибутов id.

HTML5:

избавляется от дополнительных ограничений на атрибут id глянь сюда. Единственные оставшиеся требования (помимо уникальности в документе):

  1. значение должно содержать хотя бы один символ (не может быть пустым)
  2. он не может содержать пробелов.

PRE-HTML5:

ID должен совпадать:

[A-Za-z][-A-Za-z0-9_:.]*
  1. Должен начинаться с букв A-Z или a-z
  2. Может содержать - (дефис), _ (подчеркивание), : (двоеточие) и . (точка)

но следует избегать : и ., потому что:

Например, идентификатор может быть помечен как «ab: c» и обозначен в таблице стилей как #ab: c, но это не только идентификатор элемента, но и идентификатор «a», класс «b», псевдо- селектор «с». Лучше избегать путаницы и держаться подальше от использования. и: все вместе.

  1. Идентификаторы лучше всего подходят для именования частей вашего макета, поэтому не должны давать одно и то же имя для идентификатора и класса.
  2. ID допускает буквенно-цифровые и специальные символы
  3. но избегайте использования символов # : . * !
  4. недопустимые пробелы
  5. не начинается с цифр или дефиса, за которым следует цифра
  6. чувствительный к регистру
  7. использование селекторов идентификаторов быстрее, чем использование селекторов классов
  8. используйте дефис "-" (знак подчеркивания "_" также можно использовать, но не подходит для поисковой оптимизации) для длинных имен классов CSS или правил идентификатора
  9. Если в правиле есть селектор идентификаторов в качестве селектора ключей, не добавляйте имя тега в правило. Поскольку идентификаторы уникальны, добавление имени тега без необходимости замедлит процесс сопоставления.
  10. В HTML5 атрибут id можно использовать в любом элементе HTML, а в HTML 4.01 атрибут id нельзя использовать с: <base>, <head>, <html>, <meta>, <param>, <script>, <style>, and <title>..

«подчеркивание тоже можно использовать, но не подходит для поисковой оптимизации»: С каких это пор поисковые системы проявляют интерес к классам CSS или именам идентификаторов?

Nick Rice 07.05.2016 19:55

для HTML5

The value must be unique amongst all the IDs in the element’s home subtree and must contain at least one character. The value must not contain any space characters.

Хотя бы один символ, без пробелов.

Это открывает двери для допустимых вариантов использования, таких как использование символов с диакритическими знаками. Это также дает нам намного больше боеприпасов, чтобы выстрелить себе в ногу, поскольку теперь вы можете использовать значения id, которые вызовут проблемы как с CSS, так и с JavaScript, если вы не будете очень осторожны.

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 об ID (от 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).

Больше информации:

  • W3 - глобальные атрибуты (id)
  • Атрибут MDN (id)

Чтобы ссылаться на идентификатор с точкой в ​​нем, вам нужно использовать обратную косую черту. Не уверен, что то же самое для дефисов или подчеркиваний. Например: HTML

<div id = "maintenance.instrumentNumber">############0218</div>

CSS

#maintenance\.instrumentNumber{word-wrap:break-word;}

Дефисы и символы подчеркивания обычно не нужно экранировать. Однако исключением является случай, когда дефис появляется в начале идентификатора и сопровождается другим дефисом (например, \--abc) или цифрой (например, \-123).

MrWhite 14.11.2013 05:25

HTML5: допустимые значения для атрибутов идентификатора и класса

Начиная с HTML5, единственными ограничениями на значение идентификатора являются:

  1. должен быть уникальным в документе
  2. не должно содержать пробелов
  3. должен содержать хотя бы один символ

Аналогичные правила применяются к классам (за исключением, конечно, уникальности).

Таким образом, значение может состоять из всех цифр, только одной цифры, только знаков пунктуации, включая специальные символы, что угодно. Просто без пробелов. Это сильно отличается от 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, регулярное выражение).

Например, в HTML5 действителен следующий идентификатор:

<div id = "9lions"> ... </div>

Однако в CSS это недопустимо:

Из спецификации CSS2.1:

4.1.3 Characters and case

In CSS, identifiers (including element names, classes, and IDs in selectors) can contain only the characters [a-zA-Z0-9] and ISO 10646 characters U+00A0 and higher, plus the hyphen (-) and the underscore (_); they cannot start with a digit, two hyphens, or a hyphen followed by a digit.

В большинстве случаев вы можете экранировать символы в контекстах, где они имеют ограничения или особое значение.


Ссылки W3C

HTML5

3.2.5.1 The id attribute

The id attribute specifies its element's unique identifier (ID).

The value must be unique amongst all the IDs in the element's home subtree and must contain at least one character. The value must not contain any space characters.

Note: There are no other restrictions on what form an ID can take; in particular, IDs can consist of just digits, start with a digit, start with an underscore, consist of just punctuation, etc.

3.2.5.7 The class attribute

The attribute, if specified, must have a value that is a set of space-separated tokens representing the various classes that the element belongs to.

The classes that an HTML element has assigned to it consists of all the classes returned when the value of the class attribute is split on spaces. (Duplicates are ignored.)

There are no additional restrictions on the tokens authors can use in the class attribute, but authors are encouraged to use values that describe the nature of the content, rather than values that describe the desired presentation of the content.

Уникальный идентификатор элемента.

В документе не должно быть нескольких элементов с одинаковым значением id.

Любая строка со следующими ограничениями:

  1. должен состоять как минимум из одного символа
  2. не должно содержать пробелов:

    • U + 0020 ПРОСТРАНСТВО
    • U + 0009 ТАБЛИЦА ПЕРСОНАЖЕЙ (вкладка)
    • ЛИНИЯ ПОДАЧИ U + 000A (LF)
    • ПОДАЧА ФОРМЫ U + 000C (FF)
    • U + 000D ВОЗВРАТ ПЕРЕВОЗКИ (CR)

Использование символов, кроме ASCII letters and digits, '_', '-' and '.', может вызвать проблемы совместимости, поскольку они не разрешены в HTML 4. Хотя это ограничение снято в HTML 5, для совместимости идентификатор должен начинаться с буквы.

Допустимы любые Буквенно-цифровое значение, «-» и «_». Но вы должны начать имя идентификатора с любым символом между А-Я или а-я.

Без пробелов, должно начинаться как минимум с символа от a до z и от 0 до 9.

В HTML

Я БЫ должен начинаться с {А-Я} или {а-я}, вы можете добавить Цифры, точка, дефис, подчеркивание, двоеточия.

Например:

<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 трудно выбрать эти ID. Таким образом, вы должны использовать первые четыре идентификатора. Как предпочитают многие разработчики, и, если это необходимо, вы также можете использовать последние два.

значения могут быть: [a-z], [A-Z], [0-9], [* _: -]

он используется для HTML5 ...

мы можем добавить id с любым тегом.

Так как ES2015, мы можем также использовать -почти- все символы юникода для идентификаторов, если кодировка документа установлена ​​на UTF8.

Протестируйте здесь: https://mothereff.in/js-variables

Прочтите о: https://mathiasbynens.be/notes/javascript-identifiers-es6

In ES2015, identifiers must start with $, _, or any symbol with the Unicode derived core property ID_Start.

The rest of the identifier can contain $, _, U+200C zero width non-joiner, U+200D zero width joiner, or any symbol with the Unicode derived core property ID_Continue.

const target = document.querySelector("div").id
console.info(
   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.info( ONE );
</script>

Другие вопросы по теме