Нормально ли иметь два элемента с одинаковым идентификатором в двух элементах 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
но!
Если вам это нужно в вашем проекте, вы можете использовать его, как предложено в моем Вопрос Последнее Обновление!
проверка и пурист-изм в сторону, он отлично работает. Но я определенно был бы раздражен, если бы я использовал этот #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.