javascript - Velg alle elementer med et "data-xxx"-attributt uten å bruke jQuery
Ved å bruke kun ren JavaScript, hva er den mest effektive måten å velge alle DOM-elementer som har et bestemt data--attributt (la oss si data-foo) på.
Elementene kan være forskjellige, for eksempel:
<p data-foo="0"></p><br/><h6 data-foo="1"></h6>
Svar #1
Du kan bruke querySelectorAll:
document.querySelectorAll('[data-foo]');
Svar #2
document.querySelectorAll("[data-foo]")
vil hente alle elementer med det attributtet.
document.querySelectorAll("[data-foo='1']")
vil bare gi deg dem med en verdi på 1.
Svar #3
document.querySelectorAll('[data-foo]')
å få en liste over alle elementer som har attributtet data-foo
Hvis du vil hente et element med dataattributt som har en spesifikk verdi, for eksempel
<div data-foo="1"></div>
<div data-foo="2"></div>
og jeg vil hente div med data-foo satt til "2"
document.querySelector('[data-foo="2"]')
Men her kommer vri ... hva om jeg vil matche verdien av data-attributtet med verdien til en variabel? For eksempel, hvis jeg vil hente elementene der data-foo-attributtet er satt til i
var i=2;
så du dynamisk kan velge elementet som har spesifikt dataelement ved bruk av mal-literal
document.querySelector(`[data-foo="${i}"]`)
Merk at selv om du ikke skriver verdi som streng, blir den konvertert til streng, som hvis jeg skriver
<div data-foo=1></div>
og deretter inspisere elementet i Chrome utviklerverktøy, vil elementet vises som nedenfor
<div data-foo="1"></div>
Du kan også kryssjekke ved å skrive koden nedenfor i konsollen
console.log(typeof document.querySelector(`[data-foo="${i}"]`).dataset('dataFoo'))
hvorfor jeg har skrevet 'dataFoo' selv om attributtet er data-foo grunnen er at dataset-egenskaper konverteres til camelCase-egenskaper
Jeg har henvist til lenkene nedenfor:
- MDN: data-*
- MDN: Bruke dataattributter
Svar #4
Prøv det → her
<!DOCTYPE html>
<html>
<head></head>
<body>
<p data-foo="0"></p>
<h6 data-foo="1"></h6>
<script>
var a = document.querySelectorAll('[data-foo]');
for (var i in a) if (a.hasOwnProperty(i)) {
alert(a[i].getAttribute('data-foo'));
}
</script>
</body>
</html>
