Javascript: Pilih semua atribut data-qa di Halaman HTML

Sep 30 2020

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

2 ElectricShadow Sep 30 2020 at 09:20

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>

farinspace Oct 10 2020 at 03:18

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>