Я понимаю, что идентификатор должен быть уникальным на странице HTML / XHTML.
У меня вопрос: могу ли я назначить ему несколько идентификаторов для данного элемента?
<div id = "nested_element_123 task_123"></div>
Я понимаю, что у меня есть простое решение - просто использовать класс. Мне просто интересно использовать идентификаторы таким образом.
В редких случаях, когда у вас нет доступа к исходному HTML (например, при создании прокси), если вам нужно настроить таргетинг на элемент, имеющий несколько идентификаторов, селектор css [id = "one two three" '] должен нацеливаться на этот элемент.
Это действительно зависит от указанной спецификации (и, вероятно, реализованной) и контекста в ней. то есть w3.org/TR/html5/dom.html#the-id-attribute и более старый, который указывает "да"? w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attrib ute
@willywonka Я знаю, что это прошло более двух лет, но я наткнулся на эту статью только сейчас, ища ответ на этот вопрос, и мне захотелось поделиться с вами сценарием, с которым я столкнулся, поскольку вы так и не получили ответа. Я делаю проект для freecodecamp по созданию калькулятора JS. Они хотят, чтобы идентификатор вывода был "отображаемым", чтобы они могли запускать свои тесты против него, но я создаю научный калькулятор с двумя дисплеями: #input и #output, поэтому для отображения #input ТАКЖЕ требуется идентификатор "display" значение в дополнение к значению "input" я хочу дать ему для единообразия.
Привет, @TaraStahler, добро пожаловать. Насколько я знаю, браузер будет отображать только первый, если вы используете обозначение <... id = "input" id = "display" ...>, а также идентификатор не должен содержать пробелов (или табуляции), поэтому запись <... id = "input display" ...> вообще недопустима. Просто поэкспериментировал с javascript в консоли Chrome, и в обоих случаях он возвращает «Uncaught ReferenceError: display is not defined». Только первый случай возвращает объект, если я получаю его с первым идентификатором, второй недостижим. Во втором случае ни один из идентификаторов недостижим. Может быть, вам нужно провести рефакторинг вашего кода?
Нет необходимости в нескольких идентификаторах для одного и того же тега, поскольку каждый идентификатор является уникальным идентификатором, однозначно идентифицирующим этот конкретный тег. Но вы можете использовать несколько классов или даже атрибут data- следующим образом: <... id = "input" data-id = "display" ...>.






Это интересно, но, насколько я знаю, ответ - твердое нет. Я не понимаю, зачем вам нужен вложенный идентификатор, поскольку вы обычно скрещиваете его с другим элементом с таким же вложенным идентификатором. Если вы этого не сделаете, нет смысла, если вы сделаете это, все равно будет очень мало смысла.
Я бы также хотел использовать 2 идентификатора для обратной совместимости. например, что-то раньше было статьей-8 в предыдущей версии, но теперь называется узлом-8, имеющим 2 идентификатора одного элемента, что предотвратит кодирование обходного пути, чтобы сделать его обратно совместимым. Хотя оба идентификатора останутся уникальными идентификаторами.
Нет, у вас не может быть несколько идентификаторов для одного тега, но я видел тег с атрибутом name и атрибутом id, которые в некоторых приложениях обрабатываются одинаково.
в IE, до IE8, да. но теперь они исправили эту ошибку в стандартном режиме. getElementById () используется для неправильного возврата элементов, соответствующих регистру без учета регистра имени и идентификатора.
Нет. Из Спецификация 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). Поэтому, если вы хотите выразить многозначные идентификаторы, вы должны выразить это по-другому.
Я полагаю, это зависит от спецификации, которую вы цитируете. «Эта спецификация не исключает возможность наличия у элемента нескольких идентификаторов ...» w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attrib ute
Смотрите здесь, где это предложение удалено w3.org/TR/html5/dom.html#the-id-attribute
Хорошо, я набрал 200 голосов за этот ответ. Это верно. Я увижу себя.
Нет. Хотя определение из 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>
а затем используйте навигацию, чтобы получить то, что вам действительно нужно.
Если вы просто хотите применить стили, лучше использовать имена классов.
Однако это нарушит валидацию.
Что незаконного в этом ответе? Может кто-нибудь объяснить, почему голосование против?
Не я. :-) И я не уверен, что вы имеете в виду, говоря о нарушении проверки? Идентификаторы div и span различаются (включающие и закрытые), поэтому проблем с повторяющимися идентификаторами нет. Может быть, некоторые люди не очень внимательно читают.
Ограбление банка незаконно, проблема с программным обеспечением никогда не бывает незаконной. Это снова проблема старой виртуальной реальности и реальной реальности :-P
Отладка чужого кода @BrianFenton заставила меня понять, что это должно быть незаконно. Я говорю 5 лет тюрьмы за несоблюдение спецификаций без уважительной причины.
В моем понимании всегда было:
ID - одноразового использования и применяются только к одному элементу ...
Можно использовать классы больше чем единожды ...
Я не думаю, что это может быть ответом на вопрос. Возникает вопрос: «Можно ли использовать несколько идентификаторов для одного элемента?»
@kevin Этот ответ предполагает, что OP сталкивается с проблемой XY и определенно может помочь кому-то, кто пытается добиться поведения класса через идентификаторы - по любой причине.
Вы имеете в виду «одноразовое использование», но это может вызвать путаницу. Вы можете, и это частая и правильная вещь, многократно использовать один элемент по его идентификатору. Я думаю, вы обращаетесь к другой интерпретации: вы должны использовать один (и только один) идентификатор для элемента и ТОЛЬКО для этого элемента.
Нет, вам следует использовать вложенные DIV, если вы хотите пойти по этому пути. Кроме того, даже если бы вы могли представить, какую путаницу это вызовет при запуске document.getElementByID (). Какой идентификатор он получит, если их несколько?
По немного связанной теме, вы можете добавить несколько классы в DIV. См. Обсуждение Эрика Майерса по адресу,
http://meyerweb.com/eric/articles/webrev/199802a.html
Разве он не получит идентификатор, который вы укажете в скобках? getElementById(); ничего не делает без строки, указывающей, что получить ?! getElementById('foo'); получит элемент с foo в качестве идентификатора! Несколько идентификаторов здесь не имеют значения. Он все равно будет искать «foo».
У вас может быть только один идентификатор для каждого элемента, но вы действительно можете иметь более одного класса. Но не используйте несколько атрибутов класса, поместите несколько значений класса в один атрибут.
<div id = "foo" class = "bar baz bax">
совершенно законно.
Я знаю, что этому год, но мне самому это было любопытно, и я уверен, что другие найдут здесь свой путь. Простой ответ - нет, как говорили до меня другие. У элемента не может быть более одного идентификатора, и идентификатор не может использоваться на странице более одного раза. Попробуйте, и вы увидите, насколько хорошо работает не.
В ответ на ответ tvanfosson относительно использования одного и того же идентификатора в двух разных элементах. Насколько мне известно, идентификатор можно использовать на странице только один раз, независимо от того, прикреплен ли он к другому тегу.
По определению, элемент, которому требуется идентификатор, должен быть уникальным, но если вам нужно два идентификатора, тогда он не совсем уникален и вместо этого ему нужен класс.
Но, если вы читаете ответ tvanfosson, два идентификатора явно отличаются "enclosing_id_123"! = "Enclosed_id_123"
Я не думаю, что у вас может быть два идентификатора, но это должно быть возможно. Использование одного и того же идентификатора дважды - это другой случай ... как два человека, использующие один и тот же паспорт. Однако у одного человека может быть несколько паспортов ... Я искал это, так как у меня есть ситуация, когда один сотрудник может выполнять несколько функций. Скажите «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 с использованием списка, разделенного пробелами, невозможно.
Отличный ответ - вот и кот среди голубей.
К сожалению, здесь действует не спецификация CSS. Для HTML / XHTML вы должны посмотреть на эту спецификацию, и в спецификации определенно сказано, что каждый элемент может иметь не более одного идентификатора, и этот идентификатор должен быть уникальным на странице: w3.org/TR/html401/struct/global.html#h-7.5.2 (для HTML 4)
@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)
у вас может быть только один атрибут id, а формат содержимого атрибута id не допускает наличия пробелов. В контексте вопроса - присвоение элементу 2 идентификаторов «HTML» - это невозможно сделать ни в HTML 4, ни в HTML 5. Вы делаете предположение, что присвоение ему идентификатора, который работает с CSS, достаточно для что он пытается сделать, и, возможно, наличие xmlid сработает, но я не понимаю, как вы можете решить этот вопрос, как написано. Пример, который он показывает, не будет работать ни в HTML 4, ни в HTML 5, и нет никакого способа заставить его работать, чтобы выполнить то, что показано.
@tvanfosson: Вы абсолютно правы в том, что это невозможно сделать так, как ОП задал вопрос.
Я поддержал этот ответ, поскольку он отвечает на вопрос: «может вы назначать несколько идентификаторов элемента?» Однако я должен добавить, что это выходит за рамки простых спецификаций; как показано в принятом ответе, когда дело доходит до самого HTML / XHTML, в спецификации говорится, что вы можете Только назначить идентификатор, используя атрибут id. Чтобы уточнить, атрибут xml:id (и фактически любой атрибут за пределами пространства имен по умолчанию) недопустим в XHTML. Однако, как вы цитируете из спецификации HTML5, это никоим образом не приводит к отказу xml:id = "bar" без предупреждения; он по-прежнему будет добавлять к этому элементу идентификатор bar, что позволяет ему соответствовать #bar.
Вот почему вам всегда нужно прокручивать вниз и читать все обсуждения.
Спецификация: w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attrib ute, т.е. «Эта спецификация не исключает наличие у элемента нескольких идентификаторов ...»
Это действительно так: w3.org/TR/html5/dom.html#the-id-attribute Таким образом, это действительно зависит от указанной спецификации.
Технически я хотел бы сказать да, поскольку на самом деле то, что отображается, технически всегда зависит от браузера. Большинство браузеров стараются максимально соответствовать спецификациям, и, насколько мне известно, в спецификациях 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 для более подробной информации.
Я почти какое-то время программирую на html css и js. Мне часто нужно использовать несколько классов, но я действительно никогда не использую, и мне не нужно использовать несколько идентификаторов. Тем не менее мне немного любопытно: могу ли я спросить, с какой ситуацией вы столкнулись в таком случае, когда вам потребовалось несколько идентификаторов?