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, firstChildgunakan NodeList dari childNodes, dan firstElementChildgunakan children. Saya mendasarkan asumsi ini pada referensi MDN:
childNodeadalah referensi ke elemen anak pertama dari simpul elemen, ataunulljika tidak ada.
Saya menduga bahwa, dalam hal kecepatan, perbedaannya, jika ada, akan hampir tidak ada, karena firstElementChildsecara efektif referensi children[0], dan childrenobjek sudah ada dalam memori pula.
Apa yang melemparku, adalah childNodesobjeknya. Saya telah menggunakannya untuk melihat formulir, di elemen tabel. Sementara childrendaftar semua elemen bentuk, childNodesjuga 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 childNodeselemen tampaknya bekerja di kedua level.
Untuk kembali ke pertanyaan awal saya, tebakan saya adalah: jika saya ingin objek yang paling komprehensif, childNodesadalah 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.