Нормально ли иметь два элемента с одинаковым идентификатором в двух элементах div с другим идентификатором: обновлено

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

<div id="div1">
     <img id="loading" />
</div>
<div id="div2">
     <img id="loading" />
</div>

и css:

#div1 #loading
{
    some style here...
}
#div2 #loading
{
    another style here...
}

отлично работает для меня, но, возможно, это не рекомендуется делать так?

спасибо

обновление

Да, я знаю, что я могу использовать классы, а это настоятельно рекомендуется сделать так, но я хочу знать, есть ли потенциальная опасность в использовании ИД? я думаю, нет, потому что, когда я писал, например

$("#div1 #loading")... он становится уникальным элементом. не так ли?

Последнее Обновление

используйте предложенный principe, если у вас есть причины сделать это! ;)

13 ответов


измените свой id на class. Это не хорошая идея, чтобы дать дубликат id.

думаю, что два студента, имеющие один и тот же рулон нет в классе. Представьте, что они получают результат экзамена. Как школа сможет распознать знак?

ваш путь не совместим с кросс-браузером, и будет влиять на многое при кодировании JavaScript и размещенной формы и т. д.

Вы можете получить тот же эффект, используя класс

посмотреть

<div id="div1">
     <img class="loading" />
</div>
<div id="div2">
     <img class="loading" />
</div>

и css:

#div1 .loading
{
    some style here...
}
#div2 .loading
{
    another style here...
}

идентификатор должен (следует) быть уникальным!!

У вас будут проблемы с выбором его через JS в большинстве браузеров - лучше использовать класс


большая причина для манипуляции JavaScript DOM. В твоем случае, если ты сделаешь что-то подобное...

document.getElementById("loading")

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


только потому, что никто другой не опубликовал его -спецификация HTML, раздел на ID, который говорит:

id = имя [CS]

этот атрибут присваивает имя элемента. Это имя должно быть уникальным в документе.


Да, вы правы, это не рекомендуется делать так. Идентификатор всегда должен быть уникальным (например, если вы хотите выбрать элемент с помощью javascript). Если вы просто хотите добавить тот же стиль в divs, просто используйте класс css.


уникальный:

в математике и логике фраза "существует один и только один" используется для обозначения того, что существует ровно один объект с определенным свойством.

#div1 #loading не устраняет тот факт, что у вас есть два экземпляра #loading на документ. Так что нет, не делай этого.


идентификаторы должны быть уникальными, поэтому id1 и id2 прекрасны, но для многих элементов с тем же стилем используйте класс HTML и селектор классов CSS:

.loading
{
styles here
}

они могут быть повторены столько раз, сколько вы хотите на странице :)


Это нормально? Нет.

рекомендуется? Определенно нет! На самом деле это запрещено (но принуждение слабое).

но это (по-видимому) работает, так ...


Id используются для различения элементов, они должны быть уникальными по разным причинам, один из них-использование javascript, функция, такая как getElementById, не будет хорошо работать, если у вас есть дубликат ID, вы не сможете предсказать, что он будет делать в разных браузерах, поскольку JS самореализуется в каждом браузере по-разному.

Если вы хотите использовать структуру, такую как # div loading и #div2 loading, кажется очевидным, что обе загрузки имеют схожие применения, поэтому они должны быть классами и будут использоваться такой

#див1.погрузка и #див2.загрузка

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

.загрузка{ стиль, общий для обеих загрузок }

#див1.загрузка{ стиль, используемый только загрузкой в div1 }

див2#.загрузка{ стиль, используемый только загрузкой в div2 }


https://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#adef-id

enter image description here

но!

Если вам это нужно в вашем проекте, вы можете использовать его, как предложено в моем Вопрос Последнее Обновление!


проверка и пурист-изм в сторону, он отлично работает. Но я определенно был бы раздражен, если бы я использовал этот #loading id и обнаружил, что эффект jquery или эффект css применяется к более чем 1 элементу.Скажите мне, если IE6 или 7 или Firefox 1.x или 2.x разрушает этот код.


Это плохая практика использования i'D на элементе. Потому что я бы дал что-то для понимания уникального с их идентификацией имени. И во-вторых, мы используем его в CSS, но в JavaScript это плохая практика. Хороший пример для этого класса и ученика.

Так что не делайте этого.


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

javascript выполняет математику и выводит результат в div с id="total". Однако мне нужно, чтобы тот же самый "итог" был в 2 разных местах. В этом случае почему бы мне не использовать два разных div с одинаковым идентификатором? Мне нужен тот же номер в оба поля. С jQuery я выступаю и выведите математику один раз, и она заполнит оба div одновременно, что я и хочу.

до тех пор, пока вы понимаете риски, когда, если вы вытягивали информацию из этих 2 div с тем же идентификатором, тогда я говорю, не стесняйтесь. Пока вы не путаете себя и не нуждаетесь в 2 разных результатах в том же div ID.