Javascript: Pilih semua atribut data-qa di Halaman HTML
Hanya menggunakan JavaScript, tanpa menggunakan JQuery dll, cara apa yang paling efisien untuk memilih semua nama atribut yang memiliki atribut data tertentu (katakanlah 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>
Hasil yang diharapkan harus ada dalam daftar:
apple
book
car
Pertanyaan ini mendapatkan elemen induk, saya ingin atributnya sendiri. Pilih semua elemen dengan atribut "data-" tanpa menggunakan jQuery
Sumber:
Selenium menemukan elemen melalui atribut Data-Qa
Atribut Data-QA: Cara yang lebih baik untuk memilih elemen untuk otomatisasi pengujian UI
Jawaban
Kode di bawah bekerja dengan mendapatkan semua elemen yang digunakan document.querySelectorAll, memetakan elemen ke nilai atribut data, dan kemudian memfilter yang salah atau '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>
Untuk referensi, di bawah ini pada dasarnya adalah fungsionalitas inti vanilla javascript yang dibutuhkan ...
Menggunakan querySelectorAll, querySelectordan getElementByIdharus Anda mulai.
// 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>