2012-01-16 2 views
3

Можно ли иметь несколько элементов dom с одним и тем же идентификатором на странице, если эти элементы содержатся только в разных идентичных диалоговых окнах JQuery UI? Например:Duplicate DOM id и jQuery UI Dialog

<div id="tabInfo" class="tabDiv"> 
     <ul> 
      <li><a href="#tabs-info">Book Info</a></li> 
      <li><a href="#tabs-reviews">Reviews</a></li> 
      <li><a href="#tabs-subjects">Related Subjects</a></li> 
      <li><a href="#tabs-alsoByAuthor">Also by Author</a></li> 
     </ul> 
     <div id="tabs-info"> 
     ... 

tabInfo ДИВ превращается в элемент управления вкладки, и вставляется в диалоговое окно. Но я могу открыть сразу несколько диалогов, все рисунки из этого кода. В результате у меня могло быть несколько разделов на моей странице с идентификаторами tabInfo, tabs-info, tabs-reviews и т. Д.

Это все работает нормально. Мой вопрос в том, является ли jQuery UI закодированным для обработки этой ситуации, или есть лучший способ сделать это?

+1

Несколько идентификаторов недействительны HTML, люди, которые используют недействительный HTML, платят дорого. Лучший способ решить эту проблему - использовать классы вместо ids. – Raynos

+1

@Raynos - как зловещий :) –

+0

Не должно быть нескольких идентификаторов. Если вы сделали это для работы с DOM (используйте «имена»), и если вы сделали это для CSS (используйте «классы») – ajax333221

ответ

3

Нет. Идентификатор должен быть уникальным для страницы на 100%, то есть природой идентификатора. Если вам нужно кратные затем использовать класс вместо Id или сгенерировать идентификаторы динамически как tabInfo_1, tabInfo_2 и т.д.

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

http://www.w3.org/TR/html4/struct/global.html#adef-id

+2

+1 true; но jQuery все равно. Он просто захватит первый, который он видит. –

+0

Thats true Jeremy, но id по-прежнему защищает динамические идентификаторы :-) Не нужно злоупотреблять лазейками :-) – prodigitalson

+0

@JeremyHolovacs DOM тоже не волнует, он просто возьмет первый элемент, который он найдет по id. Тем не менее этого никогда не следует делать – Raynos

1

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

Стандарты существуют по какой-либо причине, а когда вы работаете с DOM, вы работаете с неполными реализациями стандартов, поэтому я бы рекомендовал найти другой способ.

+0

Нет, не может. 'jQuery (" # id "). length === 1'. Он не находит несколько элементов по одному и тому же идентификатору. – Raynos