Як виділити всі елементи з певним ідентифікатором у jQuery?


76

Я намагаюся вибрати всі <div>s з однаковим ідентифікатором у jQuery. Як мені це зробити?

Я спробував це, і це не спрацювало

jQuery('#xx').each(function(ind,obj){
      //do stuff;
});

20
Ідентифікатори мають бути унікальними. Використовуйте класи.
Ентоні Карті

25
Це всі знають, проте ніхто тут не відповів на його запитання.
Сід

4
Не завжди можна мати унікальні посвідчення особи, принаймні я не можу собі цього дозволити завжди. Ну, @mydoghasworms [відповів] [1] на запитання досить добре, до суті. [1]: stackoverflow.com/questions/902839 / ...
Fr0zenFyr

Відповіді:


38

Я б використовував різні ідентифікатори, але присвоював кожному DIV один і той же клас.

<div id="c-1" class="countdown"></div>
<div id="c-2" class="countdown"></div>

Це також має додаткову перевагу в тому, що можна реконструювати ідентифікатори на основі повернення jQuery ('. Зворотний відлік') length.


Добре, як щодо додавання кількох класів до кожного таймера зворотного відліку. IE:

<div class="countdown c-1"></div>
<div class="countdown c-2"></div>
<div class="countdown c-1"></div>

Таким чином ви отримуєте найкраще з обох світів. Це навіть дозволяє повторити "IDS"


Балласак: у мене є n лічильників з ідентифікаторами 1..n, тому для кожного я маю id = c-1, id = c-2 тощо, але деякі з них повторюються. тому я не можу використовувати ваш метод. і всі вони мають однаковий клас = 'зворотний відлік' подяка
позначте

Чому ви хочете, щоб це повторилося? Особливо на посвідчення особи, яке повинно бути унікальним.
Ballsacian1,

Балласак: дякую! це було блискуче! працює як я хочу !! не знаю, чому я раніше про це не думав!
позначка

1
Важливо мати повну відповідь, яка передбачає передумови, а не обхідний шлях. Навіть якщо ви вважаєте, що передумови не є оптимальними, вони часто є заданими (наприклад, написання сценарію Greasemonkey для існуючого веб-сайту, який використовує теги ідентифікатора таким чином).
shiggity

Це не повинно бути прийнятою відповіддю. Бувають випадки (наприклад, скрипт greasemonkey), коли ніхто не контролює html, і точно є сайти, які використовують один і той же ідентифікатор кілька разів.
блюз

401

Хоча тут є й інші правильні відповіді (наприклад, використання класів), з академічної точки зору, звичайно, можна мати кілька div з однаковим ідентифікатором, і можна вибрати їх за допомогою jQuery.

Коли ви використовуєте

jQuery("#elemid") 

він вибирає лише перший елемент із заданим ідентифікатором.

Однак, коли ви вибираєте за атрибутом (наприклад, ідентифікатор у вашому випадку), він повертає всі відповідні елементи, наприклад:

jQuery("[id=elemid]") 

Це, звичайно, працює для вибору для будь-якого атрибута, і ви можете додатково уточнити свій вибір, вказавши відповідний тег (наприклад, div у вашому випадку)

jQuery("div[id=elemid]") 

132
Ви єдині відповіли на поставлене запитання.
wcm

7
Принаймні хтось знає, як робити справжні речі в jQuery ... Боже! Я вмирав від цього, нічого іншого не працює. Я просто не можу прийняти підхід усіх інших до використання класу, я вже маю це там, щоб робити іншу роботу. Привіт @mydoghasworms !!
Пт0zenFyr

3
ЦЕ правильна відповідь, і її слід прийняти, +1
Зак

4
Красиво і просто. Дякую.
James Manes,

3
Я збирався сказати: тут багато порад, але відповідей немає. Натомість, на щастя, ви відповіли правильно, і я думаю, що це має бути прийнятим, навіть якщо підхід, запропонований @ Ballsacian1, хороший, щоб уникнути проблеми.
gigaDIE

35

Ваш документ не повинен містити два div з однаковим ідентифікатором. Це недійсний HTML , і як результат, базовий API DOM його не підтримує.

Зі стандарту HTML :

id = name [CS] Цей атрибут присвоює ім'я елементу. Це ім’я повинно бути унікальним у документі.

Ви можете призначити різні ідентифікатори кожному div і вибрати їх обидва за допомогою $('#id1, #id2). Або призначте один і той же клас обом елементам ( .clsнаприклад) і використовуйте, $('.cls')щоб вибрати їх обидва.


1
Слід також зазначити, що більшість базових функцій getElementById () jQuery та інших бібліотек в кінцевому підсумку викликають, щоб фактичний пошук відмовився повернути що-небудь, крім першого (або випадкового?) Елемента, що відповідає даному ідентифікатору, і підтримка цього означала б вручну гуляючи по DOM. Просто не варто за недійсну розмітку!
ironfroggy

1
Щодо цього допису: Цікаво, що існує функція javascript getElementsByName (xxx) - зверніть увагу на множину - маючи на увазі, що цілком законно мати більше одного елемента з однаковим ім'ям ...
Джимбо,

1
@Jimbo - Правда, але моя відповідь стосується елементів з однаковими id, ні name.
Айман Гурі

2
@Jimbo - ну так, радіогрупи залежать від функції. Не всі елементи можуть мати імена. У запитанні згадуються divs, і вони не мають атрибута name.
Квентін

4

Спробуйте це для вибору div за першим ідентифікатором

$('div[id^="c-"]')

4

$("div[id^=" + controlid + "]") поверне всі елементи керування з тим самим іменем, але потрібно переконатися, що текст не повинен міститися в жодному з елементів керування


2

Чи можете ви призначити унікальний клас CSS кожному окремому таймеру? Таким чином, ви можете використовувати селектор для класу CSS, який буде чудово працювати з декількома divелементами.


Пол, я не можу використовувати унікальний клас для кожного таймера, тому що я використовую клас для вибору всіх таймерів, для ініціалізації та стилізації таймера зворотного відліку.
позначка

1
Клас HTML . Люди використовують класи майже виключно для відповідності селекторів CSS, не роблять їх частиною іншої мови.
Квентін

0

Ви також можете спробувати обернути два div в два div з унікальними ідентифікаторами. Потім виберіть DIV з допомогою $("#div1","#wraper1")і$("#div1","#wraper2")

Ось:

<div id="wraper1">
<div id="div1">
</div>
<div id="wraper2">
<div id="div1">
</div>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.