Saya mencoba untuk mengulang semua elemen pada halaman, jadi saya ingin memeriksa setiap elemen yang ada di halaman ini untuk kelas khusus.
Jadi, bagaimana saya mengatakan bahwa saya ingin memeriksa setiap elemen?
javascript
dom
Florian Müller
sumber
sumber
document.body.getElementsByTagName('*')
for (... of ...) { }
Jawaban:
Anda dapat meneruskan
*
kegetElementsByTagName()
sehingga akan mengembalikan semua elemen di halaman:Perhatikan bahwa Anda dapat menggunakan
querySelectorAll()
, jika tersedia (IE9 +, CSS di IE8), hanya untuk menemukan elemen dengan kelas tertentu.Ini tentu akan mempercepat masalah untuk browser modern.
Browser sekarang mendukung foreach di NodeList . Ini berarti Anda dapat langsung mengulang elemen daripada menulis sendiri untuk loop.
sumber
all[i]
akan memberi Anda elemen saat ini.getElementsByClassName()
memiliki dukungan yang lebih buruk daripadaquerySelectorAll()
(yang sebelumnya tidak didukung di IE 8). OP dengan jelas menyatakan bahwa ia ingin mengulang semua elemen pada halaman, yang saya berikan solusinya dan menawarkan alternatif. Saya tidak yakin apa masalahnya dengan itu ;-).Sedang mencari yang sama. Ya tidak. Saya hanya ingin mendaftar semua DOM Nodes.
Untuk mendapatkan elemen dengan kelas tertentu, kita bisa menggunakan fungsi filter.
Menemukan solusi pada MDN
sumber
document.body.getElementsByTagName('*')
dapat mengembalikan node dalam urutan acak.Seperti biasa solusi terbaik adalah menggunakan rekursi:
Tidak seperti saran lain, solusi ini tidak mengharuskan Anda untuk membuat array untuk semua node, sehingga lebih ringan pada memori. Lebih penting lagi, ia menemukan lebih banyak hasil. Saya tidak yakin apa hasil itu, tetapi ketika pengujian pada chrome ia menemukan sekitar 50% lebih banyak node dibandingkan
document.getElementsByTagName("*");
sumber
document.getElementsByTagName("*");
” - ya, itu akan menemukan node teks dan komentar node serta elemen node . Karena OP hanya bertanya tentang elemen, itu tidak perlu.NodeList
hanya mereferensikanNode
s yang sudah dibangun di DOM Anda, jadi itu tidak seberat yang Anda bayangkan. Seseorang yang tahu lebih banyak bisa menimbang, tapi saya pikir itu hanya ukuran referensi memori, jadi 8 byte per node.Berikut adalah contoh lain tentang bagaimana Anda bisa mengulang dokumen atau elemen:
sumber
Bagi mereka yang menggunakan Jquery
sumber
Andy E. memberikan jawaban yang bagus.
Saya akan menambahkan, jika Anda merasa untuk memilih semua anak di beberapa pemilih khusus (kebutuhan ini terjadi pada saya baru-baru ini), Anda dapat menerapkan metode "getElementsByTagName ()" pada objek DOM yang Anda inginkan.
Sebagai contoh, saya hanya perlu menguraikan bagian "visual" dari halaman web, jadi saya membuatnya
Ini tidak akan pernah mempertimbangkan bagian kepala.
sumber
dari tautan ini
referensi javascript
PEMBARUAN: EDIT
sejak jawaban terakhir saya, saya menemukan solusi yang lebih sederhana dan lebih baik
sumber
document.all
tidak disarankandocument.getElementBy*
.Menggunakan
*
sumber
Saya pikir ini sangat cepat
sumber
Mendapatkan semua elemen menggunakan
var all = document.getElementsByTagName("*"); for (var i=0, max=all.length; i < max; i++);
tidak apa-apa jika Anda perlu memeriksa setiap elemen tetapi akan menghasilkan memeriksa atau mengulang elemen berulang atau teks.Di bawah ini adalah implementasi rekursi yang memeriksa atau mengulang setiap elemen dari semua elemen DOM hanya sekali dan menambahkan:
(Kredit ke @George Reith untuk jawaban rekursi di sini: Peta HTML ke JSON )
sumber
Anda bisa mencobanya
document.getElementsByClassName('special_class');
sumber
getElementsByClassName()
dan itu tidak didukung oleh Internet Explorer hingga versi 9.