Должен ли идентификатор быть уникальным на всей странице? - PullRequest
44 голосов
/ 26 февраля 2012

Я использую jQuery и мне просто интересно, должен ли ID быть всегда уникальным на всей странице? Класс, я знаю, можно повторять сколько угодно раз, а как насчет ID?

Ответы [ 10 ]

41 голосов
/ 26 февраля 2012

Да, он должен быть уникальным.

HTML4:

https://www.w3.org/TR/html4/struct/global.html#h-7.5.2

Раздел 7.5.2:

id = name [CS] Этот атрибут присваивает имя элементу. Это имя должно быть уникальным в документе.

HTML5:

https://www.w3.org/TR/html5/dom.html#element-attrdef-global-id

Атрибут id указывает уникальный идентификатор (ID) своего элемента. значение должно быть уникальным среди всех идентификаторов в домашнем поддереве элемента и должен содержать хотя бы один символ. Значение не должно содержать любые пробелы.

9 голосов
/ 26 февраля 2012

от MDN enter image description here https://developer.mozilla.org/en/DOM/element.id

так что я думаю, что лучше быть ...

4 голосов
/ 26 февраля 2018

Технически, по стандартам HTML5 идентификатор должен быть уникальным на странице - https://developer.mozilla.org/en/DOM/element.id

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

Мы называем это "компонентизация"

Например, на вашей странице может быть компонент, который является неким виджетом. Внутри него есть свои уникальные идентификаторы, например, «ok-button»

Как только на странице появятся многие из этих виджетов, у вас технически будет неверный HTML. Но имеет смысл компонентировать ваши виджеты, чтобы каждый из них, внутренне, ссылался на свою собственную кнопку ok, например, при использовании jquery для поиска из своего корня это может быть: $widgetRoot.find("#ok-button")

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

Как упоминалось выше, даже YouTube делает это, так что это не так уж и плохо.

3 голосов
/ 13 января 2018

Янв 2018, вот HTML-код Youtube, вы можете увидеть id = "button" id = "info" дублированы.

enter image description here

3 голосов
/ 26 февраля 2012

Браузеры снисходительно относились к этому (много лет назад, когда css был молодым) и позволяли использовать идентификатор несколько раз. Они стали более строгими.

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

Если вам нужно использовать форматирование CSS более одного раза, используйте CLASS.

2 голосов
/ 26 февраля 2012

В этом и заключается весь смысл удостоверения личности. :) Идентификаторы являются конкретными, могут использоваться только один раз на страницу. Классы могут быть использованы как угодно.

1 голос
/ 26 февраля 2012

С помощью Javascript вы можете ссылаться только на один элемент, используя ID. Селектор document.getElementById и jQuery $ вернут только первый соответствующий элемент. Так что не имеет смысла использовать один и тот же идентификатор для нескольких элементов.

1 голос
/ 26 февраля 2012

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

У каждого есть уникальный идентификационный номер (например, номер социального страхования), и в социальном классе

много людей
1 голос
/ 26 февраля 2012

Да, идентификаторы уникальны.Класс не.

0 голосов
/ 21 апреля 2016

На один и тот же вопрос есть отличные ответы на https://softwareengineering.stackexchange.com/questions/127178/two-html-elements-with-same-id-attribute-how-bad-is-it-really.

Один лакомый кусочек, не упомянутый выше , заключается в том, что если на одной странице несколько идентичных id с, даже если это нарушает стандарт):

Если вам нужно обойти это (это печально), вы можете использовать $("*#foo"), который убедит jQuery использовать getElementsByTagName и вернуть списоквсе подходящие элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...