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

1891
задан Taryn 22 March 2017 в 16:14
поделиться

11 ответов

Для [1 112] HTML 4 , ответ технически:

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

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

идентификационный атрибут чувствителен к регистру в [1 114] XHTML.

Как чисто практический вопрос, можно хотеть избежать определенных символов. Периоды, двоеточия и '#' имеют особое значение в селекторах CSS, таким образом, необходимо будет выйти из тех символов с помощью обратная косая черта в CSS или двойная обратная косая черта в , селекторная строка передала jQuery. Думайте о том, как часто необходимо будет выйти из символа в таблицах стилей или коде, прежде чем Вы сойдете с ума с периодами и двоеточиями в идентификаторах.

, Например, объявление <div id="first.name"></div> HTML допустимо. Можно выбрать тот элемент в CSS как #first\.name и в jQuery как так: $('#first\\.name')., Но если Вы забываете обратную косую черту, $('#first.name'), у Вас будет совершенно допустимый селектор, ища элемент с идентификатором first и также имея класс name. Это - ошибка, которую легко пропустить. Вы могли бы быть более счастливыми в конечном счете выбор идентификатора first-name (дефис, а не период), вместо этого.

можно упростить задачи разработки путем строгого придерживания соглашения о присвоении имен. Например, если Вы ограничиваете себя полностью символами нижнего регистра и всегда разделяете слова или с дефисами или с подчеркиваниями (но не оба, выберите один и никогда не используйте другой), тогда у Вас есть легкий, чтобы помнить шаблон. Вы никогда не будете задаваться вопросом, "был он firstName или FirstName?" потому что Вы будете всегда знать, что необходимо ввести first_name. Предпочесть Camel-регистр? Тогда ограничьте себя этим, никакими дефисами или подчеркиваниями, и всегда, последовательно используйте или верхний регистр или нижний регистр для первого символа, не смешивайте их.

<час>

А теперь очень неясная проблема состояла в том что по крайней мере один браузер, Netscape 6, неправильно рассматриваемые идентификационные значения атрибута как чувствительные к регистру . Это означало, что, если Вы ввели id="firstName" в Вашем HTML (нижний регистр 'f') и #FirstName { color: red } в Вашем CSS (прописной 'F'), тот ошибочный браузер не выберет цвет элемента к красному. Во время этого редактирования, апрель 2015, я надеюсь, что Вас не просят поддерживать Netscape 6. Считайте это исторической сноской.

1607
ответ дан dgvid 22 March 2017 в 16:14
поделиться

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

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

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

60
ответ дан nasmorn 22 March 2017 в 16:14
поделиться

От спецификации HTML 4...

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

РЕДАКТИРОВАНИЕ: d'oh! Избитый к кнопке, снова!

14
ответ дан Steve Morgan 22 March 2017 в 16:14
поделиться

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

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

32
ответ дан pdc 22 March 2017 в 16:14
поделиться

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

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

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

14
ответ дан pimvdb 22 March 2017 в 16:14
поделиться

От спецификация HTML 4:

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

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

213
ответ дан Peter Hilton 22 March 2017 в 16:14
поделиться

Можно технически использовать двоеточия и периоды в атрибутах идентификатора/имени, но я настоятельно рекомендовал бы избежать обоих.

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

, Если Вы даете элементу идентификатор "мой cool:thing", Ваш селектор CSS будет похож на это:

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

, Который действительно говорит, "элемент с идентификатором 'моего', классом 'прохладных' и 'вещи' псевдоселектор" в CSS - говорят.

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

, Который должен быть Вашим первым беспокойством.

146
ответ дан Michael Thompson 22 March 2017 в 16:14
поделиться

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

var name = 'O'Hara';

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

63
ответ дан Álvaro González 22 March 2017 в 16:14
поделиться

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

10
ответ дан 22 November 2019 в 20:02
поделиться

С тех пор ES2015 мы можем также использовать - почти весь unicode символы для идентификатора, если набор символов документа установлен на UTF8.

Тест здесь: https://mothereff.in/js-variables

enter image description here

Read о: 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̙̙̔̄͜">
0
ответ дан 22 November 2019 в 20:02
поделиться

Дефисы, подчеркивания, периоды, двоеточия, цифры и буквы - все они действительны для использования в 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>
30
ответ дан 22 November 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: