ฉันสงสัยว่า JavaScript มีวิธีการมากมายเพื่อให้ได้องค์ประกอบลูกแรกจากองค์ประกอบใด ๆ แต่สิ่งใดที่ดีที่สุด โดยที่ดีที่สุดฉันหมายถึง: เบราว์เซอร์ที่เข้ากันได้มากที่สุดเร็วที่สุดครอบคลุมที่สุดและคาดเดาได้เมื่อมีพฤติกรรม รายการของวิธีการ / คุณสมบัติที่ฉันใช้เป็นนามแฝง:
var elem = document.getElementById('container');
var child = elem.children[0];
var child = elem.firstElementChild; // == children[0]
ใช้ได้กับทั้งสองกรณี:
var child = elem.childNodes[0]; // or childNodes[1], see below
นั่นคือในกรณีของรูปแบบหรือ<div>
การทำซ้ำ หากฉันอาจพบองค์ประกอบข้อความ:
var child = elem.childNodes; // treat as NodeList
var child = elem.firstChild;
เท่าที่ผมสามารถทำงานออกfirstChild
ใช้ NodeList จากchildNodes
และการใช้งานfirstElementChild
children
ฉันใช้ข้อสมมติฐานนี้อ้างอิง MDN:
childNode
เป็นการอ้างอิงถึงองค์ประกอบลูกแรกของโหนดองค์ประกอบหรือnull
ถ้าไม่มี
ฉันเดาว่าในแง่ของความเร็วความแตกต่างถ้ามีจะไม่เป็นอะไรเลยเนื่องจากfirstElementChild
มีการอ้างอิงอย่างมีประสิทธิภาพchildren[0]
และchildren
วัตถุนั้นอยู่ในความทรงจำอยู่แล้ว
สิ่งที่ทำให้ฉันเป็นchildNodes
วัตถุ ฉันใช้มันเพื่อดูฟอร์มในองค์ประกอบตาราง ในขณะที่children
รายการองค์ประกอบของรูปแบบทั้งหมดchildNodes
ก็ดูเหมือนว่าจะมีช่องว่างจากรหัส HTML:
console.log(elem.childNodes[0]);
console.log(elem.firstChild);
บันทึกทั้งคู่ <TextNode textContent="\n ">
console.log(elem.childNodes[1]);
console.log(elem.children[0]);
console.log(elem.firstElementChild);
บันทึกทั้งหมด<input type="text"
… >
. มาทำไม ฉันเข้าใจว่าวัตถุหนึ่งจะอนุญาตให้ฉันทำงานกับรหัส HTML "แบบดิบ" ในขณะที่อีกชิ้นหนึ่งยึดติดกับ DOM แต่childNodes
องค์ประกอบดูเหมือนว่าจะใช้ได้ทั้งสองระดับ
หากต้องการกลับไปที่คำถามเริ่มต้นฉันจะเดาว่า: หากฉันต้องการวัตถุที่ครอบคลุมที่สุดchildNodes
เป็นวิธีที่จะไป แต่เนื่องจากความครอบคลุมของมันอาจไม่สามารถคาดเดาได้มากที่สุดในแง่ของการคืนองค์ประกอบที่ฉันต้องการ / คาดหวังในช่วงเวลาใดก็ตาม การสนับสนุนข้ามเบราว์เซอร์อาจพิสูจน์ว่าเป็นสิ่งที่ท้าทายในกรณีนั้นแม้ว่าฉันจะผิด
ใครสามารถอธิบายความแตกต่างระหว่างวัตถุที่อยู่ในมือ? หากมีความแตกต่างของความเร็วอย่างไรก็ตามเล็กน้อยฉันก็รู้เช่นกัน หากฉันเห็นสิ่งผิดทั้งหมดรู้สึกฟรีเพื่อให้ความรู้แก่ฉัน
PS: ได้โปรดได้โปรดฉันชอบ JavaScript ดังนั้นใช่ฉันต้องการจัดการกับสิ่งนี้ คำตอบเช่น“ jQuery เกี่ยวข้องกับสิ่งนี้เพื่อคุณ” ไม่ใช่สิ่งที่ฉันกำลังมองหาjQuery แท็ก