Які дійсні значення для атрибута id у HTML?


2015

Під час створення idатрибутів для елементів HTML, які правила існують для значення?


96
Це відрізняється між HTML5 та попередніми версіями специфікації. Я пояснив це тут: mathiasbynens.be/notes/html5-id-class
Mathias Bynens

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

3
Вимоги HTML4 та HTML5 до IDзначень дуже різні. Ось швидкий і повний перелік IDправил HTML5 : stackoverflow.com/a/31773673/3597276
Майкл Бенджамін

5
Зверніть увагу: Виконання, як сказано у деяких відповідях, та використання періоду ( **.**)з jQuery зіткнеться з вами досить багато проблем, наприклад, використання, <input id="me.name" />а потім $("#me.name").val()змусить jQuery шукати <me>тег із класом .name, якого ніхто не хоче дійсно!
Can O 'Spam

3
@SamSwift pe Ні, вам просто потрібно уникати спеціальних символів, як кажуть документи . Перевірте цю демонстраційну версію .
Альваро Гонсалес

Відповіді:


1702

Для HTML 4 відповідь технічно:

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

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

Атрибут id чутливий до регістру в XHTML .

Як суто практичне питання, ви можете уникати певних персонажів. Періоди, колонки та "#" мають особливе значення у селекторах CSS, тому вам доведеться уникати цих символів за допомогою зворотної косої риски в CSS або подвійної косої риски в рядку селектора, переданому jQuery . Подумайте, як часто вам доведеться уникати персонажа у ваших таблицях стилів чи коду, перш ніж зійти з розуму з періодами та колонками в ідентифікаторах.

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

Ви можете спростити свої завдання з розробки, суворо дотримуючись конвенції про іменування. Наприклад, якщо ви повністю обмежуєтесь малими символами і завжди розділяєте слова або дефісами, або підкресленнями (але не обома, виберіть одне і ніколи не використовуйте інше), то у вас є легкий для запам'ятовування шаблон. Ви ніколи не замислюєтеся "це було firstNameчи FirstName?" тому що ви завжди будете знати, що вам слід набрати first_name. Віддаєте перевагу верблюдовому футляру? Тоді обмежтеся цим: жодні дефіси чи підкреслення, і завжди, послідовно використовуйте ні великі, ні великі регістри для першого символу, не змішуйте їх.


Дуже малозрозумілою проблемою було те, що принаймні один браузер, Netscape 6, неправильно трактував значення атрибутів id як залежні від регістру . Це означало, що якби ви ввели id="firstName"свій HTML (нижній регістр 'f') та #FirstName { color: red }CSS (верхній регістр 'F'), цей помилковий браузер не зміг би встановити колір елемента червоним. На момент редагування, квітня 2015 року, я сподіваюся, що вас не просять підтримати Netscape 6. Вважайте це виносною приміткою.


78
Зауважте, що атрибути класу та id залежать від регістру в XHTML, всі інші атрибути - ні. Ерік Мейєр згадав про це в семінарі CSS, який я відвідував.
Джон Топлі

31
Також зауважте, що якщо ви спробуєте написати правило CSS для націлювання на елемент за ідентифікатором та на ідентифікаційні істоти з числом, воно не вийде. Бампер!
Zack The Human

55
Як для '.' або ':' в ідентифікаторі, що використовує jQuery, див. поширені запитання jQuery . Він містить невелику функцію, яка виконує необхідні втечі.
Вольфрам

7
idАтрибут [ w3.org/TR/html4/struct/global.html#adef-id](case чутливий в HTML4) і повинен починатися з літери (обмежена А до Z). Також зауважте, що ваш приклад не повинен робити текст вашого елемента червоним, оскільки ваш CSS посилається на елемент класу, а FirstNameне на ваш id.
Август Клінг

5
Помилка, на яку вказував Август, все ще присутня. У вашому прикладі, якщо у вас є id="firstName"або HTML 4, або HTML 5 і #FirstName { color: red }CSS, лише баггічний браузер встановить колір елемента червоним.
Стівен Буер

221

З специфікації HTML 4 :

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

Поширена помилка - використовувати ідентифікатор, який починається з цифри.


20
Зауважте, що HTML5 дозволяє набагато більше, ніж HTML4, див., Наприклад, 456bereastreet.com/archive/201011/… та w3.org/TR/html5/elements.html#the-id-attribute
Містер Шарк

IE6 не підтримував ідентифікатор, починаючи з підкреслення, але він все одно мертвий.
doc_id

2
@rahmanisback щодо IE6, можна було б подумати так, але я зараз закінчую пропозицію для банку, і вони наполягають на тому, щоб будь-яка програма, яку розробник розробляє, запускалася в IE6. Це для 30 000 користувачів. Чорт, якщо ми можемо просто змусити їх оновлювати браузери на всіх цих настільних комп’ютерах, це може просто допомогти рівню безробіття.
Карл

2
@Karl Вибачте, почувши це. Докладіть усіх зусиль, щоб попередити проблеми безпеки IE6. Однак IE7 незабаром стане новим IE6, так що так, здається, наша доля в цій галузі виправити помилки минулого MS.
doc_id

@MrShark Друга ланка розірвана; Нове посилання
SWdV

155

Ви можете технічно використовувати двокрапки та періоди в атрибутах id / name, але я настійно пропоную уникати обох.

У CSS (і декількох бібліотеках JavaScript, таких як jQuery), і період, і двокрапка мають особливе значення, і у вас виникнуть проблеми, якщо ви не будете обережні. Періоди є селекторами класів, а колонки - псевдоселекторами (наприклад, ": навести курсор" для елемента, коли миша над ним).

Якщо ви даєте елементу ідентифікатор "my.cool:thing", ваш вибір CSS виглядатиме так:

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

Що насправді говорить: "елемент з ідентифікатором" мій ", клас" круто "і" псевдоселектор "в річчі CSS.

Дотримуйтесь AZ будь-якого випадку, цифр, підкреслення та дефісів. І як сказано вище, переконайтеся, що ваші ідентифікатори унікальні.

Це має бути вашим першим питанням.


21
Ви можете використовувати двокрапки та періоди, але вам потрібно буде уникнути їх за допомогою подвійних нахилів, наприклад: $ ('# мій \\. Класний \\: річ') або уникнення змінної: $ ('#' + id.replace (/ \ ./, '\\.'). Замінити (/ \: /, '\\:')) groups.google.com/group/jquery-en/browse_thread/thread/…
joeformd

2
Чому б не числівники; чому просто AZ? Числа є дуже корисними ідентифікаторами при посиланні на елементи, пов’язані з даними, введеними цифрою, доки ви не починаєте з числа.
cori

4
Тільки FYI, тире - це технічно дефіси. Знак мінусу не в наборі символів ASCII. en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes
Anton Strogonoff

4
Якщо ви маєте ці символи ( ., :) в ідентифікаторах і не можете їх видалити (кашля ... Sharepoint), ви можете обійти це в CSS із селекторами атрибутів замість селекторів ідентифікаторів, наприклад [id='my.cool:thing'], однак цей селектор матиме нижчу специфіку, ніж селектор id, що може спричинити інші проблеми.
Фауст

2
Старий, я знаю, але оновлений, щоб включити номери та зворотній зв'язок на дефісах
Майкл Томпсон

67

JQuery робить обробляти будь-яке припустиме ім'я ідентифікатора. Вам просто потрібно уникнути метахарактерів (тобто крапки, крапки з комою, квадратні дужки ...). Це як би сказати, що у JavaScript є проблема з цитатами лише тому, що ви не можете писати

var name = 'O'Hara';

Селектори в API jQuery (див. Нижню примітку)


66

Суворо воно повинно відповідати

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

Але у jquery, здається, є проблеми з колонами, тому, можливо, краще їх уникнути.


2
Або в якості альтернативи: "так що може бути краще уникати jquery". ;)
domsson

59

HTML5:

позбавляється від додаткових обмежень на атрибут id див. тут . Залишилися єдині вимоги (крім унікальних у документі):

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

PRE-HTML5:

Ідентифікатор повинен відповідати:

[A-Za-z][-A-Za-z0-9_:.]*
  1. Починати потрібно з символів AZ або az
  2. Може містити -(дефіс), _(підкреслення), :(двокрапка) та .(період)

але слід уникати :і тому .:

Наприклад, ідентифікатор може бути позначений "ab: c" і посилатися на аркуші стилів як #ab: c, але як ідентифікатор для елемента, він може означати id "a", клас "b", pseudo- селектор "c". Краще уникати плутанини і триматися подалі від використання. і: взагалі.


57

HTML5: Дозволені значення для атрибутів ID та класу

Щодо 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 Персонажі та відмінок

У CSS ідентифікатори (включаючи назви елементів, класи та ідентифікатори у селекторах) можуть містити лише символи [a-zA-Z0-9] та ISO 10646 символів U + 00A0 і вище, плюс дефіс (-) та підкреслення ( _); вони не можуть починатись цифрою, двома дефісами або дефісом, за яким слід цифра .

У більшості випадків ви можете уникнути символів у контекстах, де вони мають обмеження або особливе значення.


Посилання на W3C

HTML5

3.2.5.1 id Атрибут

idАтрибут вказує унікальний ідентифікатор свого елемента (ID).

Значення повинно бути унікальним серед усіх ідентифікаторів домашнього піддерева елемента і повинно містити принаймні один символ. Значення не повинно містити символів пробілу.

Примітка. Немає інших обмежень щодо форми форми ідентифікатора; зокрема, ідентифікатори можуть складатися з просто цифр, починати з цифри, починати з підкреслення, складатися з просто розділових знаків тощо.

3.2.5.7 class Атрибут

Атрибут, якщо він вказаний, повинен мати значення, яке є набором розділених пробілом лексем, що представляють різні класи, до яких належить елемент.

Класи, які присвоїв йому елемент HTML, складаються з усіх класів, повернених, коли значення атрибута класу розділено на пробіли. (Дублікати ігноруються.)

Немає додаткових обмежень для лексем, які автори можуть використовувати в атрибуті класу, але авторам рекомендується використовувати значення, що описують природу вмісту, а не значення, що описують бажане представлення вмісту.


34

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

Специфікація проекту HTML 5 розширює правила для атрибутів idі nameатрибутів: вони тепер є просто непрозорими рядками, які не можуть містити пробілів.


32

Дефіси, підкреслення, крапки, колонки, цифри та літери є дійсними для використання з 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>

25

HTML5

Маючи на увазі, що 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).

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

  • W3 - глобальні атрибути (id)
  • MDN atribute (id)

18

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

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

CSS

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

3
Як правило, дефіси та підкреслення не потрібно уникати. Однак виняток з цього є, якщо дефіс з’являється на початку ідентифікатора і супроводжується іншим дефісом (напр. \--abc) Або цифрою (наприклад \-123).
MrWhite

16

З специфікації HTML 4 ...

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

РЕДАКТУЙТЕ: d'oh! Знову прибитий до ґудзика!


16

Також ніколи не забувайте, що посвідчення особи унікальне. Після використання значення ідентифікатора може знову не з’являтися ніде в документі.

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

З іншого боку, є клас-елемент. Як ідентифікатор, він може з’являтися багато разів, але значення може використовуватися знову і знову.


12

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

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


11

Здається, хоча колонки (:) та періоди (.) Дійсні в специфікації HTML, вони недійсні як селектори ID в CSS, тому, напевно, найкраще уникати, якщо ви збираєтесь використовувати їх для цієї мети.


@MathiasBynens Посилання розірвано. Тепер це mothereff.in/css-escapes#0foo%23bar.baz%3Aqux
Oriol

Вони недійсні, якщо уникнути їх правильно. Дивіться mothereff.in/css-escapes#0foo%23bar.baz%3Aqux
Mathias Bynens

10

для HTML5

Значення повинно бути унікальним серед усіх ідентифікаторів домашнього піддерева елемента і повинно містити принаймні один символ. Значення не повинно містити символів пробілу.

Принаймні один символ, пробілів немає.

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


9
  1. Ідентифікатори найкраще підходять для іменування частин вашого макета, тому не повинні давати однакове ім’я для ідентифікатора та класу
  2. ID дозволяє буквено-цифрові та спеціальні символи
  3. але уникайте використання # : . * !символів
  4. не допускаються пробіли
  5. не починається цифрами або дефісом з цифрою
  6. з урахуванням регістру
  7. використання селекторів ідентифікаторів швидше, ніж використання селекторів класів
  8. використовувати дефіс "-" (підкреслення "_" також можна використовувати, але не добре для seo) для довгих назв правил CSS або Id правил
  9. Якщо правило має селектор ідентифікаторів як свій селектор, не додайте ім'я до правила. Оскільки ідентифікатори є унікальними, додавання імені тегу гальмує процес узгодження.
  10. У HTML5 атрибут id може бути використаний для будь-якого елемента HTML, а в HTML 4.01 атрибут id не можна використовувати з: <base>, <head>, <html>, <meta>, <param>, <script>, <style>, and <title>.

"Підкреслення також може використовуватись, але не корисно для seo": з тих пір, коли пошукові системи зацікавились іменами класів або id CSS?
Нік Райс

9

Будь - яке альфа-числове значення та " - " та " _ " є дійсним. Але вам слід почати ім'я id з будь-якого символу між AZ або az .


6

Жодних пробілів не повинно починатися із знака від a до z та 0 до 9.


4

В HTML

Ідентифікатор повинен починатися з {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>

Але навіть якщо ви можете зробити ідентифікатор за допомогою Colons (:) або period (.), CSS важко використовувати ці ідентифікатори як Selector. В основному, коли ви хочете використовувати псевдоелементи (: раніше,: після).

Також у JS важко вибрати ці ідентифікатори. Таким чином, ви повинні використовувати перші чотири ідентифікатори, як вважають за краще багато розробників навколо, і якщо це необхідно, ніж ви можете також використовувати останні два.



2

Починаючи з ES2015, ми також можемо використовувати -значно всі символи unicode для ідентифікаційних номерів , якщо для діапазону документів встановлено значення UTF8.

Перевірте тут: https://mothereff.in/js-variables

введіть тут опис зображення

Читайте про: https://mathiasbynens.be/notes/javascript-identifiers-es6

У ES2015 ідентифікатори повинні починатись з $, _ або будь-якого символу з основним властивістю Unicode ID_Start.

Інша частина ідентифікатора може містити $, _, U + 200C нульову ширину, не приєднується, приєднувач нульової ширини U + 200D або будь-який символ із базовим властивістю 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


-4

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.