Подскажите, пожалуйста, есть ли какой-нибудь DOM API, который ищет элемент с заданным именем атрибута и значением атрибута:
Что-то вроде:
doc.findElementByAttribute("myAttribute", "aValue");
Подскажите, пожалуйста, есть ли какой-нибудь DOM API, который ищет элемент с заданным именем атрибута и значением атрибута:
Что-то вроде:
doc.findElementByAttribute("myAttribute", "aValue");
Ответы:
Обновление: за последние несколько лет ландшафт резко изменился. Теперь вы можете надежно использовать querySelector
и querySelectorAll
см . Ответ Войтека о том, как это сделать.
Теперь нет необходимости в зависимости от jQuery. Если вы используете jQuery, отлично ... если нет, вам больше не нужно полагаться на него только для выбора элементов по атрибутам.
В ванильном javascript нет очень короткого способа сделать это, но есть несколько доступных решений.
Вы делаете что-то вроде этого, просматривая элементы и проверяя атрибут
Если библиотека типа jQuery является опцией, вы можете сделать это немного проще, например так:
$("[myAttribute=value]")
Если значение не является допустимым идентификатором CSS (в нем есть пробелы или знаки пунктуации и т. Д.), Вам необходимо заключить в кавычки значение (они могут быть одинарными или двойными):
$("[myAttribute='my value']")
Вы можете также сделать start-with
, ends-with
, contains
и т.д. ... Есть несколько вариантов для выбора атрибута .
Современные браузеры поддерживают нативный, querySelectorAll
так что вы можете сделать:
document.querySelectorAll('[data-foo="value"]');
https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll
Подробная информация о совместимости браузера:
Вы можете использовать jQuery для поддержки устаревших браузеров (IE9 и старше):
$('[data-foo="value"]');
SyntaxError: An invalid or illegal string was specified
'[data-foo="value"]'
Мы можем использовать селектор атрибута в 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.
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 обновлено за комментарии рекомендации.
document.querySelectorAll('[data-foo="value"]');
как предложено @Wojtek Kruszewski на принятом awnser.
Вы можете использовать getAttribute:
var p = document.getElementById("p");
var alignP = p.getAttribute("align");
https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute
p
элемент, не используя id
или каждый p
в DOM (и тестовые атрибуты)
Используйте селекторы запросов, примеры:
document.querySelectorAll(' input[name], [id|=view], [class~=button] ')
input[name]
Вводит элементы со name
свойством.
[id|=view]
Элементы с идентификатором, которые начинаются с view-
.
[class~=button]
Элементы с button
классом.