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

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

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

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

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


person webmat    schedule 10.10.2008    source источник
comment
Я почти какое-то время программирую на html css и js. Мне часто нужно использовать несколько классов, но я действительно никогда не использую, и мне не нужно использовать несколько идентификаторов. Тем не менее, мне немного любопытно: могу ли я спросить, с какой ситуацией вы столкнулись в таком случае, когда вам потребовалось несколько идентификаторов?   -  person willy wonka    schedule 17.03.2017
comment
В редких случаях, когда у вас нет доступа к исходному HTML (например, при создании прокси), если вам нужно настроить таргетинг на элемент, имеющий несколько идентификаторов, селектор css [id = one two three '] должен нацеливаться на этот элемент.   -  person JisuKim82    schedule 18.08.2017
comment
Это действительно зависит от указанной спецификации (и, вероятно, реализованной) и контекста в ней. т.е. w3.org/TR/html5/dom.html#the -id-attribute и более старый, который означает «да»? w3.org/TR/2011/ WD-html5-20110525 / elements.html # the-id-attribute   -  person Mark Schultheiss    schedule 24.10.2017
comment
@willywonka Я знаю, что это прошло более двух лет, но я наткнулся на эту статью только сейчас, ища ответ на этот вопрос, и мне захотелось поделиться с вами сценарием, с которым я столкнулся, поскольку вы так и не получили ответа. Я делаю проект для freecodecamp по созданию калькулятора JS. Они хотят, чтобы идентификатор вывода отображался, чтобы они могли запускать свои тесты против него, но я создаю научный калькулятор с двумя дисплеями: #input и #output, поэтому для отображения #input ТАКЖЕ требуется значение идентификатора дисплея в дополнение к значение ввода я хочу дать ему для единообразия.   -  person Tara    schedule 15.08.2019
comment
Привет, @TaraStahler, добро пожаловать. Насколько я знаю, браузер будет отображать только первый, если вы используете обозначение ‹... id = input id = display ...›, а также идентификатор не должен содержать пробелов (или табуляции), поэтому обозначение ‹. ..id = input display ... ›вообще не действует. Просто поэкспериментировал с javascript в консоли Chrome, и он возвращает Uncaught ReferenceError: display не определен в обоих случаях. Только первый случай возвращает объект, если я получаю его с первым идентификатором, второй недостижим. Во втором случае ни один из идентификаторов недостижим. Может быть, вам нужно провести рефакторинг вашего кода?   -  person willy wonka    schedule 16.09.2019
comment
Нет необходимости в нескольких идентификаторах для одного и того же тега, поскольку каждый идентификатор является уникальным идентификатором, однозначно идентифицирующим этот конкретный тег. Но вы можете использовать несколько классов или даже атрибут data- следующим образом: ‹... id = input data-id = display ...›.   -  person willy wonka    schedule 16.09.2019


Ответы (18)


Нет. Из XHTML 1.0 Spec

В XML идентификаторы фрагментов имеют тип ID, и для каждого элемента может быть только один атрибут типа ID. Следовательно, в XHTML 1.0 атрибут id определен как идентификатор типа. Чтобы гарантировать, что документы XHTML 1.0 являются хорошо структурированными документами XML, документы XHTML 1.0 ДОЛЖНЫ использовать атрибут id при определении идентификаторов фрагментов для элементов, перечисленных выше. Информацию о том, как обеспечить обратную совместимость таких якорей при обслуживании документов XHTML в качестве типа мультимедиа text / html, см. В Руководстве по совместимости с HTML.

person timmow    schedule 10.10.2008
comment
идентификаторы фрагментов имеют тип ID, и для каждого элемента может быть только один атрибут типа ID. Здесь говорится, что один атрибут и атрибут отличаются от значений атрибута. Он не говорит о том, что значения атрибутов не должны в любом контексте предполагать многозначность либо через пробел, либо через любое разделение символов. Хотя в спецификации сказано, что для обратной совместимости он не должен содержать пробела в значениях атрибутов. Идентификаторы фрагментов (w3.org/TR/xhtml1/#guidelines). Поэтому, если вы хотите выразить многозначные идентификаторы, вы должны выразить это по-другому. - person Richeve Bebedor; 28.04.2013
comment
Я полагаю, это зависит от спецификации, которую вы цитируете. Эта спецификация не препятствует элементу, имеющему несколько идентификаторов ... w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute - person Mark Schultheiss; 24.10.2017
comment
См. Здесь, где это предложение удалено w3.org/TR/html5 /dom.html#the-id-attribute - person Mark Schultheiss; 24.10.2017
comment
Хорошо, я набрал 200 голосов за этот ответ. Все нормально. Я увижу себя. - person KhoPhi; 03.02.2020

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

В спецификации селекторов это очень четко сказано:

Если элемент имеет несколько атрибутов идентификатора, все они должны рассматриваться как идентификаторы этого элемента для целей селектора идентификаторов. Такая ситуация может быть достигнута с использованием сочетания xml: id, DOM3 Core, XML DTD и конкретных пространств имен. знания.


Изменить

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

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

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

person user123444555621    schedule 16.04.2011
comment
Отличный ответ - вот и кот среди голубей. - person TrojanName; 18.05.2011
comment
К сожалению, здесь действует не спецификация CSS. Для HTML / XHTML вы должны взглянуть на эту спецификацию, и в спецификации определенно сказано, что каждый элемент может иметь не более одного идентификатора, и этот идентификатор должен быть уникальным на странице: w3.org/TR/html401/struct/global.html#h-7.5.2 ( для HTML 4) - person tvanfosson; 18.05.2011
comment
@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) - person user123444555621; 19.05.2011
comment
у вас может быть только один атрибут id, а формат содержимого атрибута id не допускает наличия пробелов. В контексте вопроса - предоставление элемента 2 идентификатора HTML - это невозможно сделать ни в HTML 4, ни в HTML 5. Вы делаете предположение, что присвоение ему идентификатора, который работает с CSS, достаточно для того, что он пытаюсь сделать, и может быть, что наличие xmlid будет работать, но я не понимаю, как вы можете решить этот вопрос, как написано. Пример, который он показывает, не будет работать ни в HTML 4, ни в HTML 5, и нет никакого способа заставить его работать, чтобы выполнить то, что показано. - person tvanfosson; 19.05.2011
comment
@tvanfosson: Вы абсолютно правы в том, что это невозможно сделать так, как ОП задал вопрос. - person user123444555621; 19.05.2011
comment
Я поддержал этот ответ, поскольку он отвечает на вопрос: можно ли назначить несколько идентификаторов элементу? Однако я должен добавить, что это выходит за рамки простых спецификаций; как показано в принятом ответе, когда дело доходит до самого HTML / XHTML, в спецификации говорится, что вы можете только назначать идентификатор с помощью атрибута id. Чтобы уточнить, атрибут xml:id (и фактически любой атрибут за пределами пространства имен по умолчанию) недопустим в XHTML. Однако, как вы цитируете из спецификации HTML5, это никоим образом не приводит к отказу xml:id="bar" молча; он все равно добавит bar ID к этому элементу, что позволит ему соответствовать #bar. - person BoltClock; 18.06.2012
comment
Вот почему вам всегда нужно прокручивать вниз и читать все обсуждения. - person Eduardo La Hoz Miranda; 14.03.2014
comment
Спецификация: w3.org/TR/ 2011 / WD-html5-20110525 / elements.html # the-id-attribute, т.е. эта спецификация не исключает наличие у элемента нескольких идентификаторов ... - person Mark Schultheiss; 24.10.2017
comment
Это действительно так: w3.org/TR/ html5 / dom.html # the-id-attribute Таким образом, это действительно зависит от указанной спецификации. - person Mark Schultheiss; 24.10.2017

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

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

person acrosman    schedule 10.10.2008

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

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

    • Each is attributed as a Unique Identifier to (only) one single element.
  • Классы можно использовать более одного раза ...

    • They can therefore be applied to more than one element, and similarly yet different, there can be more than one class (i.e. multiple classes) per element.
person Ross    schedule 10.10.2008
comment
Я не думаю, что это может быть ответом на вопрос. Возникает вопрос: можно ли использовать несколько идентификаторов для одного элемента? - person Kevin; 19.04.2015
comment
@kevin Этот ответ предполагает, что OP сталкивается с проблемой XY и определенно может помочь кому-то, кто пытается добиться поведения класса через идентификаторы - по любой причине. - person Mahdi; 08.08.2015
comment
Вы имеете в виду одноразовое использование, но это может вызвать путаницу. Вы можете, и это частая и правильная вещь, многократно использовать один элемент по его идентификатору. Я думаю, вы обращаетесь к другой интерпретации: вы должны использовать один (и только один) идентификатор для элемента и ТОЛЬКО для этого элемента. - person Mbotet; 30.12.2019

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

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

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

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

person tvanfosson    schedule 10.10.2008
comment
Однако это нарушит валидацию. - person Aupajo; 11.10.2008
comment
Что незаконного в этом ответе? Может кто-нибудь объяснить, почему голосование против? - person tpower; 12.10.2008
comment
Не я. :-) И я не уверен, что вы имеете в виду, говоря о нарушении валидации? Идентификаторы div и span различаются (включающие и закрытые), поэтому проблем с повторяющимися идентификаторами нет. Может быть, некоторые люди не очень внимательно читают. - person tvanfosson; 12.10.2008
comment
Ограбление банка незаконно, проблема с программным обеспечением никогда не бывает незаконной. Это снова проблема старой виртуальной реальности и реальной реальности :-P - person TrojanName; 18.05.2011
comment
Отладка чужого кода @BrianFenton заставила меня понять, что это должно быть незаконно. Я говорю 5 лет тюрьмы за несоблюдение спецификаций без уважительной причины. - person ProblemsOfSumit; 10.01.2014

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

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

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

person AmbroseChapel    schedule 10.10.2008

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

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

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

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

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

person Anjisan    schedule 10.10.2008
comment
Разве он не получит идентификатор, который вы укажете в скобках? getElementById(); ничего не делает без строки, указывающей, что получить ?! getElementById('foo');получит элемент с идентификатором foo! Несколько идентификаторов здесь не имеют значения. Он все равно будет искать foo. - person Rin and Len; 14.11.2019

Технически я хотел бы сказать да, поскольку на самом деле то, что отображается, технически всегда зависит от браузера. Большинство браузеров стараются максимально соответствовать спецификациям, и, насколько мне известно, в спецификациях 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>
person James    schedule 18.04.2012

Любой идентификатор, присвоенный элементу div, уникален. Однако вы можете назначить несколько идентификаторов под, а не к элементу div. В этом случае вы должны представить эти идентификаторы как <span></span> идентификаторы.

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

Exponential Equations

<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>
person Samdom For Peace    schedule 30.10.2018

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

Атрибут id присваивает элементу уникальный идентификатор (который может быть проверен парсером SGML).

а также

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

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

person Alexandr    schedule 13.08.2013

No.

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

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

person Snowcrash    schedule 25.04.2015

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

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

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

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

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

person Taylor    schedule 20.04.2010
comment
Но, если вы читаете ответ tvanfosson, два идентификатора явно отличаются enclosing_id_123! = Enclosed_id_123 - person Ben; 07.12.2010

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

<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>
person Community    schedule 01.03.2014

Нет.

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

Значение не должно содержать пробелов.

id="a b" ‹- найдите пробел в этом VaLuE.

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

person corysimmons    schedule 16.12.2017

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

подробнее см. https://www.w3schools.com/html/html_id.asp Детали.

person Agboola Feyikemi    schedule 28.01.2020

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

person Ole Reidar Johansen    schedule 13.09.2010