Saya bertanya-tanya, JavaScript menawarkan berbagai metode untuk mendapatkan elemen anak pertama dari elemen apa pun, tetapi mana yang terbaik? Maksud saya, sebagian besar browser yang kompatibel, tercepat, terlengkap, dan dapat diprediksi dalam hal perilaku. Daftar metode / properti yang saya gunakan sebagai alias:
var elem = document.getElementById('container');
var child = elem.children[0];
var child = elem.firstElementChild; // == children[0]
Ini berfungsi untuk kedua kasus:
var child = elem.childNodes[0]; // or childNodes[1], see below
Itu dalam hal bentuk, atau <div>
iterasi. Jika saya mungkin menemukan elemen teks:
var child = elem.childNodes; // treat as NodeList
var child = elem.firstChild;
Sejauh yang saya bisa, firstChild
gunakan NodeList dari childNodes
, dan firstElementChild
gunakan children
. Saya mendasarkan asumsi ini pada referensi MDN:
childNode
adalah referensi ke elemen anak pertama dari simpul elemen, ataunull
jika tidak ada.
Saya menduga bahwa, dalam hal kecepatan, perbedaannya, jika ada, akan hampir tidak ada, karena firstElementChild
secara efektif referensi children[0]
, dan children
objek sudah ada dalam memori pula.
Apa yang melemparku, adalah childNodes
objeknya. Saya telah menggunakannya untuk melihat formulir, di elemen tabel. Sementara children
daftar semua elemen bentuk, childNodes
juga tampaknya termasuk spasi dari kode HTML:
console.log(elem.childNodes[0]);
console.log(elem.firstChild);
Keduanya log <TextNode textContent="\n ">
console.log(elem.childNodes[1]);
console.log(elem.children[0]);
console.log(elem.firstElementChild);
Semua log <input type="text"
... >
. Bagaimana bisa? Saya mengerti bahwa satu objek akan memungkinkan saya untuk bekerja dengan kode HTML "mentah", sementara yang lain menempel pada DOM, tetapi childNodes
elemen tampaknya bekerja di kedua level.
Untuk kembali ke pertanyaan awal saya, tebakan saya adalah: jika saya ingin objek yang paling komprehensif, childNodes
adalah cara untuk pergi, tetapi karena kelengkapannya, itu mungkin bukan yang paling dapat diprediksi dalam hal mengembalikan elemen yang saya inginkan / harapkan pada saat tertentu. Dukungan lintas-browser mungkin juga terbukti menjadi tantangan dalam kasus itu, meskipun saya bisa saja salah.
Adakah yang bisa menjelaskan perbedaan antara benda-benda yang ada? Jika ada perbedaan kecepatan, betapapun bisa diabaikan, saya juga ingin tahu. Jika saya melihat ini semua salah, jangan ragu untuk mendidik saya.
PS: Tolong, saya suka JavaScript, jadi ya, saya mau berurusan dengan hal semacam ini. Jawaban seperti "penawaran jQuery dengan ini untuk Anda" bukan yang saya cari, karenanya tidakjquery menandai.