<p data-foo="bar">
Bagaimana Anda bisa melakukan hal yang sama dengan
document.querySelectorAll('[data-foo]')
di mana querySelectorAll yang tidak tersedia ?
Saya membutuhkan solusi asli yang berfungsi setidaknya di IE7. Saya tidak peduli tentang IE6.
javascript
dom
ryanve
sumber
sumber
querySelectorAll
tidak tersedia?note - I don't care all IE
Jawaban:
Anda bisa menulis fungsi yang menjalankan getElementsByTagName ('*'), dan hanya mengembalikan elemen tersebut dengan atribut "data-foo":
Kemudian,
sumber
!= null
adalah cara yang ideal (lebih baik daripada komentar saya di atas) karena di IE tua adalah mungkin untuk getAttribute untuk mengembalikan nilai yangtypeof
adalah'number'
document.getElementsByTagName('*')
bukandocument.all
?hasAttribute
daripadagetAttribute() !== null
, karena Anda hanya ingin memeriksa keberadaan dan bukan nilainya?Menggunakan
atau
untuk menemukan elemen berdasarkan atribut. Sekarang didukung di semua browser yang relevan (bahkan IE8): http://caniuse.com/#search=queryselector
sumber
Saya bermain-main sedikit dan berakhir dengan solusi kasar ini:
Penggunaannya cukup sederhana, dan berfungsi bahkan di IE8:
http://fiddle.jshell.net/9xaxf6jr/
Tetapi saya merekomendasikan untuk menggunakan
querySelector
/All
untuk ini (dan untuk mendukung browser lama gunakan polyfill ):sumber
Coba ini berhasil
document.querySelector ('[atribut = "nilai"]')
contoh:
sumber
Itu juga berfungsi:
Begitu:
sumber
document.querySelector('[data-foo="bar"]');
Coba ini - Saya sedikit mengubah jawaban di atas:
Kemudian,
sumber
Sedikit modifikasi pada jawaban @kevinfahy , untuk memungkinkan mendapatkan atribut dengan nilai jika diperlukan:
sumber
Jangan gunakan di Browser
Di browser, gunakan
document.querySelect('[attribute-name]')
.Tetapi jika Anda menguji unit dan dom palsu Anda memiliki implementasi querySelector yang tidak stabil, ini akan berhasil.
Ini adalah jawaban @ kevinfahy, baru saja dipangkas menjadi sedikit dengan fungsi panah lemak ES6 dan dengan mengubah HtmlCollection menjadi array dengan biaya keterbacaan mungkin.
Jadi ini hanya akan bekerja dengan transpiler ES6. Juga, saya tidak yakin bagaimana performanya dengan banyak elemen.
Dan inilah varian yang akan mendapatkan atribut dengan nilai tertentu
sumber