Reputation: 173
I know how to select for specific classes using querySelectorAll . But How would I select for DOM object with specific data- attributes.
For example:
<div class="person">
<div class="detail" data-field="name">Tim</div>
<div class="detail" data-field="age">24</div>
<div class="detail" data-field="hair">black</div>
</div>
<div class="person">
<div class="detail" data-field="name">Tim</div>
<div class="detail" data-field="age">34</div>
<div class="detail" data-field="name">red</div>
</div>
<div class="person">
<div class="detail" data-field="name">David</div>
<div class="detail" data-field="age">56</div>
<div class="detail" data-field="name">brown</div>
</div>
If I want to select DOMs with a specific class e.g 'detail'
document.querySelectorAll('.detail')
My question is, How would I select for all doms with 'data-field = name?'
Upvotes: 3
Views: 10183
Reputation: 3655
You want to use the attribute selector
// every element with a data-field attribute
var dataFieldElements = document.querySelectorAll('[data-field]');
console.log(dataFieldElements);
// only those elements that have their data-field attribute equal to name
var dataFieldNameElements = document.querySelectorAll('[data-field=name]');
console.log(dataFieldNameElements);
<div class="person">
<div class="detail" data-field="name">Tim</div>
<div class="detail" data-field="age">24</div>
<div class="detail" data-field="hair">black</div>
</div>
<div class="person">
<div class="detail" data-field="name">Tim</div>
<div class="detail" data-field="age">34</div>
<div class="detail" data-field="name">red</div>
</div>
<div class="person">
<div class="detail" data-field="name">David</div>
<div class="detail" data-field="age">56</div>
<div class="detail" data-field="name">brown</div>
</div>
Upvotes: 4
Reputation: 133403
[attr=value]
Represents an element with an attribute name of attr and whose value is exactly "value".
document.querySelectorAll('.detail[data-field="name"]')
Upvotes: 7