Javascript:HTMLページのすべてのdata-qa属性を選択します
Sep 30 2020
JavaScriptのみを使用し、JQueryなどを使用せずに、特定のデータ属性(たとえば、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>
期待される結果はリストである必要があります:
apple
book
car
この質問は親要素を取得します。属性自体が必要です。jQueryを使用せずに、「data-」属性を持つすべての要素を選択します
リソース:
SeleniumはData-Qa属性を介して要素を検索します
データ-QA属性:UIテストの自動化のための要素を選択するためのより良い方法
回答
2 ElectricShadow Sep 30 2020 at 09:20
以下のコードは、を使用してすべての要素を取得し、要素をdocument.querySelectorAllデータ属性の値にマッピングしてから、偽または'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
参考までに、以下は基本的に必要なコアバニラJavaScript機能です...
使用してquerySelectorAll、querySelectorそしてgetElementByIdあなたが始める必要があります。
// 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>