Javascript: seleziona tutti gli attributi data-qa nella pagina HTML
Utilizzando solo JavaScript, senza l'uso di JQuery ecc., Qual è il modo più efficiente per selezionare tutti i nomi degli attributi che hanno un determinato attributo di dati (diciamo data-qa).
<p data-foo="0"></p><br/><h6 data-qa="apple"></h6>
<p data-foo="0"></p><br/><h6 data-qa="book"></h6>
<p data-foo="0"></p><br/><h6 data-qa="car"></h6>
Il risultato atteso dovrebbe essere un elenco:
apple
book
car
Questa domanda ottiene gli elementi principali, voglio gli attributi stessi. Seleziona tutti gli elementi con l'attributo "data-" senza utilizzare jQuery
Risorse:
Selenio trova elemento tramite l'attributo Data-Qa
Attributo QA dei dati: un modo migliore per selezionare gli elementi per l'automazione dei test dell'interfaccia utente
Risposte
Il codice seguente funziona ottenendo tutti gli elementi utilizzando document.querySelectorAll, mappando gli elementi ai valori degli attributi dei dati e quindi filtrando quelli che sono falsi o '0'.
let getAllDataAttrs = name => Array.from(
document.querySelectorAll(`[data-${name}]`) ).map(elem => elem.getAttribute(`data-${name}`))
.filter(val => val && val !== '0');
console.log(getAllDataAttrs('foo'));
<p data-foo="0"></p><br/>
<h6 data-foo="apple"></h6>
<p data-foo="0"></p><br/>
<h6 data-foo="book"></h6>
<p data-foo="0"></p><br/>
<h6 data-foo="car"></h6>
Per riferimento, di seguito è essenzialmente la funzionalità javascript vanilla principale necessaria ...
Usando querySelectorAll, querySelectore getElementByIddovrebbe iniziare.
// get "data-qa" value by "id"
var data = document.getElementById('id-test2').getAttribute('data-qa');
console.log(data);
// get "id" value by "data-qa"
var data = document.querySelector('[data-qa="data-qa-test2"]').id;
console.log(data);
// get all elements with attribute "data-qa"
var elems = document.querySelectorAll('[data-qa]');
// get all "ids"
var data = [];
elems.forEach(function(elem){
data.push(elem.id);
});
console.log(data);
// get all "data-qa"
var data = [];
elems.forEach(function(elem){
data.push(elem.getAttribute('data-qa'));
});
console.log(data);
<div id="id-test" data-qa="data-qa-test"></div>
<div id="id-test1" data-qa="data-qa-test1"></div>
<div id="id-test2" data-qa="data-qa-test2"></div>
<div id="id-test3" data-qa="data-qa-test3"></div>