<p data-foo="bar">
Wie können Sie das Äquivalent zu tun
document.querySelectorAll('[data-foo]')
wo querySelectorAll ist nicht verfügbar ?
Ich brauche eine native Lösung, die zumindest in IE7 funktioniert. IE6 ist mir egal.
javascript
dom
Ryanve
quelle
quelle
querySelectorAll
ist das nicht verfügbar?note - I don't care all IE
Antworten:
Sie können eine Funktion schreiben, die getElementsByTagName ('*') ausführt und nur die Elemente mit dem Attribut "data-foo" zurückgibt:
Dann,
quelle
!= null
ist der ideale Weg (besser als mein Kommentar oben), da getAttribute im alten IE einen Wert zurückgeben kann, dessentypeof
is'number'
document.getElementsByTagName('*')
stattdocument.all
?hasAttribute
lieber verwenden alsgetAttribute() !== null
, da Sie nur die Existenz und nicht ihren Wert überprüfen möchten?Verwenden
oder
Elemente nach Attributen zu finden. Es wird jetzt in allen relevanten Browsern (sogar IE8) unterstützt: http://caniuse.com/#search=queryselector
quelle
Ich habe ein bisschen herumgespielt und bin zu dieser groben Lösung gekommen:
Die Verwendung ist recht einfach und funktioniert sogar in IE8:
http://fiddle.jshell.net/9xaxf6jr/
Ich empfehle jedoch,
querySelector
/All
dafür zu verwenden (und um ältere Browser zu unterstützen, verwenden Sie eine Polyfüllung ):quelle
Versuchen Sie dies, es funktioniert
document.querySelector ('[attribute = "value"]')
Beispiel:
quelle
Das funktioniert auch:
So:
quelle
document.querySelector('[data-foo="bar"]');
Versuchen Sie dies - ich habe die obigen Antworten leicht geändert:
Dann,
quelle
Eine kleine Änderung an der Antwort von @kevinfahy , damit das Attribut bei Bedarf nach Wert abgerufen werden kann:
quelle
Nicht im Browser verwenden
Verwenden Sie im Browser
document.querySelect('[attribute-name]')
.Wenn Sie jedoch Unit-Tests durchführen und Ihr verspotteter Dom über eine Flakey-QuerySelector-Implementierung verfügt, reicht dies aus.
Dies ist die Antwort von @ kevinfahy, die nur auf ES6-Fettpfeilfunktionen reduziert wurde und die HtmlCollection möglicherweise auf Kosten der Lesbarkeit in ein Array konvertiert.
Es funktioniert also nur mit einem ES6-Transpiler. Ich bin mir auch nicht sicher, wie performant es mit vielen Elementen sein wird.
Und hier ist eine Variante, die ein Attribut mit einem bestimmten Wert erhält
quelle