Скажіть, будь-ласка, чи існує API DOM, який шукає елемент із заданим іменем та значенням атрибута:
Щось на зразок:
doc.findElementByAttribute("myAttribute", "aValue");
Скажіть, будь-ласка, чи існує API DOM, який шукає елемент із заданим іменем та значенням атрибута:
Щось на зразок:
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, якщо ви знаєте точний тип елемента, ви додаєте 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 оновлюється за рекомендаціями щодо коментарів.
document.querySelectorAll('[data-foo="value"]');
як запропонував @Wojtek Kruszewski про прийнятий тендер.
ви можете використовувати 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]
Елементи з id, які починаються з view-
.
[class~=button]
Елементи з button
класом.