Saya menemukan diri saya menggunakan JavaScript dan saya berlari melintasi childNodes
dan children
properti. Saya bertanya-tanya apa perbedaan di antara mereka. Apakah satu lebih disukai dari yang lain?
sumber
Saya menemukan diri saya menggunakan JavaScript dan saya berlari melintasi childNodes
dan children
properti. Saya bertanya-tanya apa perbedaan di antara mereka. Apakah satu lebih disukai dari yang lain?
Memahami bahwa itu .children
adalah properti dari Elemen . 1 Hanya Elemen yang dimiliki .children
, dan anak-anak ini semuanya tipe Element. 2
Namun, .childNodes
adalah milik Node . .childNodes
dapat berisi simpul apa saja. 3
Contoh nyata adalah:
let el = document.createElement("div");
el.textContent = "foo";
el.childNodes.length === 1; // Contains a Text node child.
el.children.length === 0; // No Element children.
Sebagian besar waktu, Anda ingin menggunakan .children
karena umumnya Anda tidak ingin mengulang simpul Teks atau Komentar dalam manipulasi DOM Anda.
Jika Anda ingin memanipulasi simpul teks, Anda mungkin menginginkannya .textContent
. 4
1. Secara teknis, ini adalah atribut ParentNode , mixin yang disertakan oleh Elemen.
2. Mereka semua elemen karena .children
merupakan HTMLCollection , yang hanya dapat berisi elemen.
3. Demikian pula, .childNodes
dapat menampung simpul apa pun karena itu adalah NodeList .
4. Atau .innerText
. Lihat perbedaannya di sini atau di sini .
.children
pada dokumen XML : jsfiddle.net/fbwbjvch/1Element.children
mengembalikan hanya elemen anak-anak, sementaraNode.childNodes
mengembalikan semua simpul anak . Perhatikan bahwa elemen adalah simpul, sehingga keduanya tersedia pada elemen.Saya percaya
childNodes
lebih dapat diandalkan. Sebagai contoh, MDC (ditautkan di atas) mencatat bahwa IE hanyachildren
benar di IE 9.childNodes
menyediakan lebih sedikit ruang untuk kesalahan oleh pelaksana browser.sumber
.children
tidak memfilter node komentar, tetapi memfilter node teks..getElementsByTagName('*')
. IE kadang-kadang bisa sangat menyebalkan ...children
yang mendukung IE.Jawaban yang bagus sejauh ini, saya hanya ingin menambahkan bahwa Anda dapat memeriksa jenis simpul menggunakan
nodeType
:yourElement.nodeType
Ini akan memberi Anda bilangan bulat: (diambil dari sini )
Perhatikan bahwa menurut Mozilla :
sumber
Pilih satu tergantung pada metode yang Anda cari !?
Saya akan pergi dengan ParentNode.children :
Karena ia menyediakan
namedItem
metode yang memungkinkan saya secara langsung untuk mendapatkan salah satu elemen anak-anak tanpa melalui semua anak atau menghindari penggunaangetElementById
dll.misalnya
Saya akan menggunakan Node.childNodes :
Karena menyediakan
forEach
metode ketika saya bekerja denganwindow.IntersectionObserver
misalnyasumber