<p data-foo="bar">
Comment pouvez-vous faire l'équivalent de
document.querySelectorAll('[data-foo]')
où querySelectorAll n'est pas disponible ?
J'ai besoin d'une solution native qui fonctionne au moins dans IE7. Je me fiche d'IE6.
javascript
dom
Ryanve
la source
la source
querySelectorAll
n'est pas disponible?note - I don't care all IE
Réponses:
Vous pouvez écrire une fonction qui exécute getElementsByTagName ('*') et ne renvoie que les éléments avec un attribut "data-foo":
Ensuite,
la source
!= null
est le moyen idéal (mieux que mon commentaire ci-dessus) car dans l'ancien IE, il est possible pour getAttribute de renvoyer une valeur quitypeof
est'number'
document.getElementsByTagName('*')
au lieu dedocument.all
?hasAttribute
plutôt quegetAttribute() !== null
, puisque vous voulez seulement vérifier l'existence et non sa valeur?Utilisation
ou
pour rechercher des éléments par attribut. Il est désormais pris en charge dans tous les navigateurs pertinents (même IE8): http://caniuse.com/#search=queryselector
la source
J'ai joué un peu et j'ai fini avec cette solution brute:
L'utilisation est assez simple et fonctionne même dans IE8:
http://fiddle.jshell.net/9xaxf6jr/
Mais je recommande d'utiliser
querySelector
/All
pour cela (et pour prendre en charge les navigateurs plus anciens, utilisez un polyfill ):la source
Essayez ça ça marche
document.querySelector ('[attribut = "valeur"]')
exemple :
la source
Cela fonctionne aussi:
Alors:
la source
document.querySelector('[data-foo="bar"]');
Essayez ceci - j'ai légèrement changé les réponses ci-dessus:
Ensuite,
la source
Une petite modification sur la réponse de @kevinfahy , pour permettre d'obtenir l'attribut par valeur si besoin:
la source
Ne pas utiliser dans le navigateur
Dans le navigateur, utilisez
document.querySelect('[attribute-name]')
.Mais si vous faites des tests unitaires et que votre dom fictif a une implémentation floconneuse de querySelector, cela fera l'affaire.
C'est la réponse de @ kevinfahy, juste réduite pour être un peu avec les fonctions de grosse flèche ES6 et en convertissant HtmlCollection en un tableau au détriment de la lisibilité peut-être.
Cela ne fonctionnera donc qu'avec un transpileur ES6. De plus, je ne sais pas à quel point ce sera performant avec beaucoup d'éléments.
Et voici une variante qui obtiendra un attribut avec une valeur spécifique
la source