<p data-foo="bar">
Comment pouvez-vous faire l'équivalent de
document.querySelectorAll('[data-foo]')
où querySelectorAll es non disponible ?
J'ai besoin d'une solution native qui fonctionne au moins dans IE7. Je ne me soucie pas d'IE6.
<p data-foo="bar">
Comment pouvez-vous faire l'équivalent de
document.querySelectorAll('[data-foo]')
où querySelectorAll es non disponible ?
J'ai besoin d'une solution native qui fonctionne au moins dans IE7. Je ne me soucie pas d'IE6.
Essayez ceci - j'ai légèrement modifié les réponses ci-dessus :
var getAttributes = function(attribute) {
var allElements = document.getElementsByTagName('*'),
allElementsLen = allElements.length,
curElement,
i,
results = [];
for(i = 0; i < allElementsLen; i += 1) {
curElement = allElements[i];
if(curElement.getAttribute(attribute)) {
results.push(curElement);
}
}
return results;
};
Ensuite,
getAttributes('data-foo');
Une petite modification sur @kevinfahy's respuesta pour permettre de récupérer l'attribut par sa valeur si nécessaire :
function getElementsByAttributeValue(attribute, value){
var matchingElements = [];
var allElements = document.getElementsByTagName('*');
for (var i = 0, n = allElements.length; i < n; i++) {
if (allElements[i].getAttribute(attribute) !== null) {
if (!value || allElements[i].getAttribute(attribute) == value)
matchingElements.push(allElements[i]);
}
}
return matchingElements;
}
Dans le navigateur, utilisez document.querySelect('[attribute-name]')
.
Mais si vous effectuez des tests unitaires et que votre domaine simulé possède une implémentation de querySelector bancale, cela fera l'affaire.
C'est la réponse de @kevinfahy, juste élaguée pour être un peu avec les fonctions flèches de ES6 et en convertissant la HtmlCollection en un tableau au prix de la lisibilité peut-être.
Il ne fonctionnera donc qu'avec un transpilateur ES6. De plus, je ne suis pas sûr de la performance qu'il aura avec un grand nombre d'éléments.
function getElementsWithAttribute(attribute) {
return [].slice.call(document.getElementsByTagName('*'))
.filter(elem => elem.getAttribute(attribute) !== null);
}
Et voici une variante qui permettra d'obtenir un attribut avec une valeur spécifique
function getElementsWithAttributeValue(attribute, value) {
return [].slice.call(document.getElementsByTagName('*'))
.filter(elem => elem.getAttribute(attribute) === value);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.