<p data-foo="bar">
Jak możesz zrobić odpowiednik
document.querySelectorAll('[data-foo]')
gdzie zapytanie querySelectorAll nie jest dostępne ?
Potrzebuję natywnego rozwiązania, które działa przynajmniej w IE7. Nie obchodzi mnie IE6.
javascript
dom
ryanve
źródło
źródło
querySelectorAll
to nie jest dostępne?note - I don't care all IE
Odpowiedzi:
Możesz napisać funkcję, która uruchamia getElementsByTagName ('*') i zwraca tylko te elementy z atrybutem „data-foo”:
Następnie,
źródło
!= null
jest sposób idealny (lepiej niż mój komentarz powyżej), ponieważ w starym czyli jest możliwe getAttribute zwrócić wartość, którejtypeof
jest'number'
document.getElementsByTagName('*')
zamiastdocument.all
?hasAttribute
zamiastgetAttribute() !== null
, skoro chcesz tylko sprawdzić istnienie, a nie jego wartość?Posługiwać się
lub
znaleźć elementy według atrybutu. Jest teraz obsługiwany we wszystkich odpowiednich przeglądarkach (nawet IE8): http://caniuse.com/#search=queryselector
źródło
Pobawiłem się trochę i skończyłem z tym prymitywnym rozwiązaniem:
Użycie jest dość proste i działa nawet w IE8:
http://fiddle.jshell.net/9xaxf6jr/
Ale polecam użyć
querySelector
/All
do tego (i do obsługi starszych przeglądarek użyj polyfill ):źródło
Spróbuj, to działa
document.querySelector ('[atrybut = "wartość"]')
przykład:
źródło
To też działa:
Więc:
źródło
document.querySelector('[data-foo="bar"]');
Spróbuj tego - nieznacznie zmieniłem powyższe odpowiedzi:
Następnie,
źródło
Trochę modyfikacja na @kevinfahy „s odpowiedzi , aby umożliwić uzyskanie przez wartość atrybutu w razie potrzeby:
źródło
Nie używaj w przeglądarce
W przeglądarce użyj
document.querySelect('[attribute-name]')
.Ale jeśli przeprowadzasz testy jednostkowe, a Twój udawany dom ma implementację flakey querySelector, to załatwi sprawę.
To jest odpowiedź @ kevinfahy, po prostu skrócona, aby była trochę za pomocą funkcji grubych strzałek ES6 i przez konwersję HtmlCollection do tablicy, być może kosztem czytelności.
Więc będzie działać tylko z transpilerem ES6. Nie jestem też pewien, jak wydajne będzie to z wieloma elementami.
A oto wariant, który otrzyma atrybut o określonej wartości
źródło