Может ли элемент html иметь несколько идентификаторов?

Я понимаю, что идентификатор должен быть уникальным на странице HTML / XHTML.

У меня вопрос: могу ли я назначить ему несколько идентификаторов для данного элемента?

<div id = "nested_element_123 task_123"></div>

Я понимаю, что у меня есть простое решение - просто использовать класс. Мне просто интересно использовать идентификаторы таким образом.

Я почти какое-то время программирую на html css и js. Мне часто нужно использовать несколько классов, но я действительно никогда не использую, и мне не нужно использовать несколько идентификаторов. Тем не менее мне немного любопытно: могу ли я спросить, с какой ситуацией вы столкнулись в таком случае, когда вам потребовалось несколько идентификаторов?

willy wonka 17.03.2017 23:56

В редких случаях, когда у вас нет доступа к исходному HTML (например, при создании прокси), если вам нужно настроить таргетинг на элемент, имеющий несколько идентификаторов, селектор css [id = "one two three" '] должен нацеливаться на этот элемент.

JisuKim82 18.08.2017 20:29

Это действительно зависит от указанной спецификации (и, вероятно, реализованной) и контекста в ней. то есть w3.org/TR/html5/dom.html#the-id-attribute и более старый, который указывает "да"? w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attrib‌ ute

Mark Schultheiss 24.10.2017 16:18

@willywonka Я знаю, что это прошло более двух лет, но я наткнулся на эту статью только сейчас, ища ответ на этот вопрос, и мне захотелось поделиться с вами сценарием, с которым я столкнулся, поскольку вы так и не получили ответа. Я делаю проект для freecodecamp по созданию калькулятора JS. Они хотят, чтобы идентификатор вывода был "отображаемым", чтобы они могли запускать свои тесты против него, но я создаю научный калькулятор с двумя дисплеями: #input и #output, поэтому для отображения #input ТАКЖЕ требуется идентификатор "display" значение в дополнение к значению "input" я хочу дать ему для единообразия.

Tara 15.08.2019 00:49

Привет, @TaraStahler, добро пожаловать. Насколько я знаю, браузер будет отображать только первый, если вы используете обозначение <... id = "input" id = "display" ...>, а также идентификатор не должен содержать пробелов (или табуляции), поэтому запись <... id = "input display" ...> вообще недопустима. Просто поэкспериментировал с javascript в консоли Chrome, и в обоих случаях он возвращает «Uncaught ReferenceError: display is not defined». Только первый случай возвращает объект, если я получаю его с первым идентификатором, второй недостижим. Во втором случае ни один из идентификаторов недостижим. Может быть, вам нужно провести рефакторинг вашего кода?

willy wonka 16.09.2019 00:54

Нет необходимости в нескольких идентификаторах для одного и того же тега, поскольку каждый идентификатор является уникальным идентификатором, однозначно идентифицирующим этот конкретный тег. Но вы можете использовать несколько классов или даже атрибут data- следующим образом: <... id = "input" data-id = "display" ...>.

willy wonka 16.09.2019 01:07
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
319
6
369 176
18
Перейти к ответу Данный вопрос помечен как решенный

Ответы 18

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

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

FLY 12.11.2012 18:11

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

в IE, до IE8, да. но теперь они исправили эту ошибку в стандартном режиме. getElementById () используется для неправильного возврата элементов, соответствующих регистру без учета регистра имени и идентификатора.

scunliffe 10.10.2008 20:10
Ответ принят как подходящий

Нет. Из Спецификация XHTML 1.0

In XML, fragment identifiers are of type ID, and there can only be a single attribute of type ID per element. Therefore, in XHTML 1.0 the id attribute is defined to be of type ID. In order to ensure that XHTML 1.0 documents are well-structured XML documents, XHTML 1.0 documents MUST use the id attribute when defining fragment identifiers on the elements listed above. See the HTML Compatibility Guidelines for information on ensuring such anchors are backward compatible when serving XHTML documents as media type text/html.

«идентификаторы фрагментов имеют тип ID, и для каждого элемента может быть только один атрибут типа ID». Здесь говорится, что один атрибут и атрибут отличаются от значений атрибута. Он не говорит, что значения атрибутов ни в каком контексте не должны предполагать многозначность либо через пробел, либо через любое разделение символов. Хотя в спецификации сказано, что для обратной совместимости он не должен содержать пробела в значениях атрибутов. Идентификаторы фрагментов (w3.org/TR/xhtml1/#guidelines). Поэтому, если вы хотите выразить многозначные идентификаторы, вы должны выразить это по-другому.

Richeve Bebedor 28.04.2013 17:05

Я полагаю, это зависит от спецификации, которую вы цитируете. «Эта спецификация не исключает возможность наличия у элемента нескольких идентификаторов ...» w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attrib‌ ute

Mark Schultheiss 24.10.2017 16:02

Смотрите здесь, где это предложение удалено w3.org/TR/html5/dom.html#the-id-attribute

Mark Schultheiss 24.10.2017 16:15

Хорошо, я набрал 200 голосов за этот ответ. Это верно. Я увижу себя.

KhoPhi 03.02.2020 14:10

Нет. Хотя определение из w3c для HTML 4 явно не охватывает ваш вопрос, определение атрибута name и id говорит, что в идентификаторе нет пробелов:

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

Нет. Каждый элемент DOM, если он имеет идентификатор, имеет единственный уникальный идентификатор. Вы можете приблизить это, используя что-то вроде:

<div id='enclosing_id_123'><span id='enclosed_id_123'></span></div>

а затем используйте навигацию, чтобы получить то, что вам действительно нужно.

Если вы просто хотите применить стили, лучше использовать имена классов.

Однако это нарушит валидацию.

Aupajo 11.10.2008 03:20

Что незаконного в этом ответе? Может кто-нибудь объяснить, почему голосование против?

tpower 12.10.2008 14:16

Не я. :-) И я не уверен, что вы имеете в виду, говоря о нарушении проверки? Идентификаторы div и span различаются (включающие и закрытые), поэтому проблем с повторяющимися идентификаторами нет. Может быть, некоторые люди не очень внимательно читают.

tvanfosson 12.10.2008 21:35

Ограбление банка незаконно, проблема с программным обеспечением никогда не бывает незаконной. Это снова проблема старой виртуальной реальности и реальной реальности :-P

TrojanName 18.05.2011 19:08

Отладка чужого кода @BrianFenton заставила меня понять, что это должно быть незаконно. Я говорю 5 лет тюрьмы за несоблюдение спецификаций без уважительной причины.

ProblemsOfSumit 10.01.2014 15:38

В моем понимании всегда было:

  • ID - одноразового использования и применяются только к одному элементу ...

    • Каждый - присваивается как уникальный идентификатор (только) одному элементу.
  • Можно использовать классы больше чем единожды ...

    • Поэтому они могут применяться к более одного элемента, и аналогично, но по-разному, может быть более одного класса (т.е. несколько классов) на элемент.

Я не думаю, что это может быть ответом на вопрос. Возникает вопрос: «Можно ли использовать несколько идентификаторов для одного элемента?»

Kevin 19.04.2015 13:21

@kevin Этот ответ предполагает, что OP сталкивается с проблемой XY и определенно может помочь кому-то, кто пытается добиться поведения класса через идентификаторы - по любой причине.

Mahdi 08.08.2015 12:28

Вы имеете в виду «одноразовое использование», но это может вызвать путаницу. Вы можете, и это частая и правильная вещь, многократно использовать один элемент по его идентификатору. Я думаю, вы обращаетесь к другой интерпретации: вы должны использовать один (и только один) идентификатор для элемента и ТОЛЬКО для этого элемента.

Mbotet 30.12.2019 12:34

Нет, вам следует использовать вложенные DIV, если вы хотите пойти по этому пути. Кроме того, даже если бы вы могли представить, какую путаницу это вызовет при запуске document.getElementByID (). Какой идентификатор он получит, если их несколько?

По немного связанной теме, вы можете добавить несколько классы в DIV. См. Обсуждение Эрика Майерса по адресу,

http://meyerweb.com/eric/articles/webrev/199802a.html

Разве он не получит идентификатор, который вы укажете в скобках? getElementById(); ничего не делает без строки, указывающей, что получить ?! getElementById('foo'); получит элемент с foo в качестве идентификатора! Несколько идентификаторов здесь не имеют значения. Он все равно будет искать «foo».

Rin and Len 14.11.2019 15:43

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

<div id = "foo" class = "bar baz bax">

совершенно законно.

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

В ответ на ответ tvanfosson относительно использования одного и того же идентификатора в двух разных элементах. Насколько мне известно, идентификатор можно использовать на странице только один раз, независимо от того, прикреплен ли он к другому тегу.

По определению, элемент, которому требуется идентификатор, должен быть уникальным, но если вам нужно два идентификатора, тогда он не совсем уникален и вместо этого ему нужен класс.

Но, если вы читаете ответ tvanfosson, два идентификатора явно отличаются "enclosing_id_123"! = "Enclosed_id_123"

Ben 07.12.2010 07:44

Я не думаю, что у вас может быть два идентификатора, но это должно быть возможно. Использование одного и того же идентификатора дважды - это другой случай ... как два человека, использующие один и тот же паспорт. Однако у одного человека может быть несколько паспортов ... Я искал это, так как у меня есть ситуация, когда один сотрудник может выполнять несколько функций. Скажите «sysadm» и «координатор команды» с идентификатором = «sysadm teamcoordinator», чтобы я мог ссылаться на них с других страниц, так что employee.html # sysadm и employee.html # teamcoordinator ведут в одно и то же место ... Однажды кто-то иначе может взять на себя функцию координатора команды, в то время как sysadm остается sysadm ... тогда мне нужно только изменить идентификаторы на странице employee.html ... но, как я уже сказал, это не работает :(

Вопреки тому, что все говорили, правильный ответ - ДА

Спецификация селекторов очень ясно об этом говорит:

If an element has multiple ID attributes, all of them must be treated as IDs for that element for the purposes of the ID selector.Such a situation could be reached using mixtures of xml:id, DOM3 Core, XML DTDs, and namespace-specific knowledge.


Редактировать

Чтобы уточнить: да, элемент XHTML может иметь несколько идентификаторов, например

<p id = "foo" xml:id = "bar">

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

Отличный ответ - вот и кот среди голубей.

TrojanName 18.05.2011 19:09

К сожалению, здесь действует не спецификация CSS. Для HTML / XHTML вы должны посмотреть на эту спецификацию, и в спецификации определенно сказано, что каждый элемент может иметь не более одного идентификатора, и этот идентификатор должен быть уникальным на странице: w3.org/TR/html401/struct/global.html#h-7.5.2 (для HTML 4)

tvanfosson 18.05.2011 22:02

@tvanfosson: Удивительно, но в спецификации HTML4 НЕ говорится, что каждый элемент может иметь не более одного идентификатора. Если вы посмотрите на спецификации HTML5, вы даже обнаружите, что This specification doesn't preclude an element having multiple IDs, if other mechanisms (e.g. DOM Core methods) can set an element's ID in a way that doesn't conflict with the id attribute. (который соответствует спецификациям CSS)

user123444555621 19.05.2011 00:57

у вас может быть только один атрибут id, а формат содержимого атрибута id не допускает наличия пробелов. В контексте вопроса - присвоение элементу 2 идентификаторов «HTML» - это невозможно сделать ни в HTML 4, ни в HTML 5. Вы делаете предположение, что присвоение ему идентификатора, который работает с CSS, достаточно для что он пытается сделать, и, возможно, наличие xmlid сработает, но я не понимаю, как вы можете решить этот вопрос, как написано. Пример, который он показывает, не будет работать ни в HTML 4, ни в HTML 5, и нет никакого способа заставить его работать, чтобы выполнить то, что показано.

tvanfosson 19.05.2011 01:50

@tvanfosson: Вы абсолютно правы в том, что это невозможно сделать так, как ОП задал вопрос.

user123444555621 19.05.2011 10:43

Я поддержал этот ответ, поскольку он отвечает на вопрос: «может вы назначать несколько идентификаторов элемента?» Однако я должен добавить, что это выходит за рамки простых спецификаций; как показано в принятом ответе, когда дело доходит до самого HTML / XHTML, в спецификации говорится, что вы можете Только назначить идентификатор, используя атрибут id. Чтобы уточнить, атрибут xml:id (и фактически любой атрибут за пределами пространства имен по умолчанию) недопустим в XHTML. Однако, как вы цитируете из спецификации HTML5, это никоим образом не приводит к отказу xml:id = "bar" без предупреждения; он по-прежнему будет добавлять к этому элементу идентификатор bar, что позволяет ему соответствовать #bar.

BoltClock 18.06.2012 10:37

Вот почему вам всегда нужно прокручивать вниз и читать все обсуждения.

Eduardo La Hoz Miranda 14.03.2014 18:24

Спецификация: w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attrib‌ ute, т.е. «Эта спецификация не исключает наличие у элемента нескольких идентификаторов ...»

Mark Schultheiss 24.10.2017 16:01

Это действительно так: w3.org/TR/html5/dom.html#the-id-attribute Таким образом, это действительно зависит от указанной спецификации.

Mark Schultheiss 24.10.2017 16:16

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

Однако я также говорю «нет», поскольку каждый браузер, который я обычно тестирую, на самом деле вам не позволяет. Если вам нужно убедиться, сохраните следующее как файл .html и откройте его в основных браузерах. Во всех протестированных мной браузерах функция javascript не соответствует элементу. Однако удалите «hunkojunk» из тега id, и все будет работать нормально. Образец кода

<html>
<head>
</head>
<body>
    <p id = "hunkojunk1 hunkojunk2"></p>

<script type = "text/javascript">
    document.getElementById('hunkojunk2').innerHTML = "JUNK JUNK JUNK JUNK JUNK JUNK";
</script>
</body>
</html>

http://www.w3.org/TR/REC-html40/struct/global.html#h-7.5.2

The id attribute assigns a unique identifier to an element (which may be verified by an SGML parser).

и

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

Таким образом, «id» должен быть уникальным и не может содержать пробелов.

классы специально созданы для этого, вот код, из которого вы можете понять

<html>
<head>
    <style type = "text/css">
     .personal{
            height:100px;
            width: 100px;   

        }
    .fam{
            border: 2px solid #ccc;
        }   
    .x{
            background-color:#ccc;
        }   

    </style>
</head>
<body>

    <div class = "personal fam x"></div>

</body> 
</html>

Нет.

Сказав это, вам ничто не мешает сделать это. Но вы получите несовместимое поведение с различными браузерами. Не делай этого. 1 идентификатор на элемент.

Если вы хотите присвоить элементу несколько назначений, используйте классы (разделенные пробелом).

Нет.

https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute

The value must not contain any space characters.

id = "a b" <- найти пробел в этом Ценить.

Тем не менее, вы создаете несколько идентификаторов в стиле может. Но если вы следуете спецификации, ответ - нет.

Any ID assigned to a div element is unique.
However, you can assign multiple IDs "under", and not "to" a div element.
In that case, you have to represent those IDs as <span></span> IDs.

Say, you want two links in the same HTML page to point to the same div element in  the page.

The two different links
<p><a href = "#exponentialEquationsCalculator">Exponential Equations</a></p>         

<p><a href = "#logarithmicExpressionsCalculator"><Logarithmic Expressions</a></p>

Point to the same section of the page. 
<!-- Exponential / Logarithmic Equations Calculator -->
<div class = "w3-container w3-card white w3-margin-bottom">      
   <span id = "exponentialEquationsCalculator"></span>
   <span id = "logarithmicEquationsCalculator"></span>
</div>

Идентификатор должен быть уникальным, поэтому вы должны использовать конкретный идентификатор только один раз на странице. Классы можно использовать повторно.

проверьте https://www.w3schools.com/html/html_id.asp для более подробной информации.

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