Найти элемент в DOM на основе значения атрибута


252

Подскажите, пожалуйста, есть ли какой-нибудь DOM API, который ищет элемент с заданным именем атрибута и значением атрибута:

Что-то вроде:

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

1
Дублируйте, если вы ищете Jquery Sol: stackoverflow.com/questions/696968/…
Раджат

13
Не могли бы вы обновить принятый ответ на современное решение, ответ Войтека?
Ник Крейвер

Ответы:


165

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

Теперь нет необходимости в зависимости от jQuery. Если вы используете jQuery, отлично ... если нет, вам больше не нужно полагаться на него только для выбора элементов по атрибутам.


В ванильном javascript нет очень короткого способа сделать это, но есть несколько доступных решений.

Вы делаете что-то вроде этого, просматривая элементы и проверяя атрибут

Если библиотека типа jQuery является опцией, вы можете сделать это немного проще, например так:

$("[myAttribute=value]")

Если значение не является допустимым идентификатором CSS (в нем есть пробелы или знаки пунктуации и т. Д.), Вам необходимо заключить в кавычки значение (они могут быть одинарными или двойными):

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

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


6
На самом деле ванильный JavaScript DOM API хорошо работает в современных браузерах
Войтек Крушевский

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

1
Я думаю, что jQuery (или его эквивалент), вероятно, проще всего, особенно если он совместим с несколькими браузерами, без необходимости знать, что для этого требуется.
Алексис Уилке

1
Я продолжаю получать пустой массив! Я пытаюсь получить SVG по его атрибуту d и пытаюсь $ ("[d = путь]"); где «путь» - это переменная, содержащая нужный мне 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 ("selector [myAttribute = aValue]");
Матяз Хирсман

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

ps если вы знаете точный тип элемента, вы добавляете третий параметр (т.е. 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 элементов на странице.
sheriffderek

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

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]Элементы с идентификатором, которые начинаются с view-.

[class~=button]Элементы с buttonклассом.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.