Знайдіть елемент у DOM на основі значення атрибута


252

Скажіть, будь-ласка, чи існує API DOM, який шукає елемент із заданим іменем та значенням атрибута:

Щось на зразок:

doc.findElementByAttribute("myAttribute", "aValue");

1
Дублікат, якщо ви шукаєте Jquery Sol: stackoverflow.com/questions/696968/…
Rajat

13
Чи можете ви, будь ласка, оновити прийняту відповідь до сучасного рішення, відповідь Войтека?
Нік Крейвер

Відповіді:


165

Оновлення: За останні кілька років ландшафт кардинально змінився. Тепер ви можете надійно використовувати querySelectorі querySelectorAll, дивіться відповідь Войтека, як це зробити.

Зараз немає потреби в залежності від jQuery. Якщо ви використовуєте jQuery, чудово ... якщо ви цього не робите, вам більше не потрібно покладатися лише на вибір елементів за атрибутами.


Існує не дуже короткий спосіб зробити це у ванільному javascript, але є деякі рішення.

Ви робите щось подібне, перебираючи елементи та перевіряючи атрибут

Якщо бібліотека на зразок jQuery - це варіант, ви можете зробити це трохи простіше, як це:

$("[myAttribute=value]")

Якщо значення не є дійсним ідентифікатором CSS (у ньому є пробіли або розділові знаки тощо), вам потрібні лапки навколо значення (вони можуть бути одиничними чи подвійними):

$("[myAttribute='my value']")

Ви можете також зробити start-with, ends-with, containsі т.д. ... Є кілька варіантів для вибору атрибута .


6
Насправді API ванільного JavaScript DOM досить добре працює на сучасних браузерах
Wojtek Kruszewski

2
@WojtekKruszewski не в 2010 році :) Я все ж таки оновив, сподіваюсь, що запитувач перемістить прийняття для нас - ми хочемо, щоб поточна інформація там була.
Нік Крейвер

1
Я думаю, що jQuery (або еквівалент), мабуть, найпростіший, особливо бути сумісним браузером, не знаючи, що для цього потрібно.
Алексіс Вілке

1
Я продовжую отримувати порожній масив! Я намагаюся схопити SVG за атрибутом d, і намагаюся $ ("[d = шлях]"); де 'path' - це змінна, що містить конкретний d-атрибут, який мені потрібен. Хтось намагався робити це за допомогою svg-шляхів?
tx291

439

Сучасні веб-переглядачі підтримують нативну, querySelectorAllщоб ви могли:

document.querySelectorAll('[data-foo="value"]');

https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll

Деталі про сумісність браузера:

Ви можете використовувати jQuery для підтримки застарілих веб-переглядачів (IE9 і новіших версій):

$('[data-foo="value"]');

2
щоб конкретизувати "сучасне" визначення: caniuse.com/#search=querySelectorAll
serhio

Здається, що значення не може бути числом абоSyntaxError: An invalid or illegal string was specified
jeum

3
Селектором повинен бути:'[data-foo="value"]'
Йотам Омер,

1
Будь-які нотатки про виступ? Це швидше, ніж ітерація над усіма вузлами?
Степан Яковенко

1
Що таке "data-foo" ... і куди в цьому прикладі "myAttribute"?
oo_dev

38

Ми можемо використовувати селектор атрибутів у DOM за допомогою document.querySelector()та document.querySelectorAll()методами.

для вашого:

document.querySelector("selector[myAttribute='aValue']");

і використовуючи querySlectorAll():

document.querySelectorAll("selector[myAttribute='aValue']");

В querySelector()і querySelectorAll()методах ми можемо вибирати об'єкти, як ми вибираємо в "CSS".

Більше про селектори атрибутів "CSS" див. У https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors


Мені довелося видалити внутрішні позначки цитата, як цей document.querySelectorAll ("селектор [myAttribute = aValue]");
Matjaz Hirsman

20
FindByAttributeValue("Attribute-Name", "Attribute-Value");   

ps, якщо ви знаєте точний тип елемента, ви додаєте 3-й параметр (тобто div, a, p ...etc...):

FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");   

але спочатку визначте цю функцію:

function FindByAttributeValue(attribute, value, element_type)    {
  element_type = element_type || "*";
  var All = document.getElementsByTagName(element_type);
  for (var i = 0; i < All.length; i++)       {
    if (All[i].getAttribute(attribute) == value) { return All[i]; }
  }
}

ps оновлюється за рекомендаціями щодо коментарів.


6
Чому ?! Ти робиш цілий цикл усіх своїх DOM, роблячи це
Артур

3
Це здається чудовим - якщо у вас на сторінці лише 5 елементів.
шерифдерек

2
document.querySelectorAll('[data-foo="value"]');як запропонував @Wojtek Kruszewski про прийнятий тендер.
Артур

7

Ось приклад, як шукати зображення в документі за атрибутом src:

document.querySelectorAll("img[src='https://pbs.twimg.com/profile_images/........jpg']");


0

Використовуйте селектори запитів, приклади:

document.querySelectorAll(' input[name], [id|=view], [class~=button] ')

input[name]Вводить елементи з nameвластивістю.

[id|=view]Елементи з id, які починаються з view-.

[class~=button]Елементи з buttonкласом.

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