Tôi đã tự hỏi, JavaScript cung cấp nhiều phương thức khác nhau để có được phần tử con đầu tiên từ bất kỳ phần tử nào, nhưng phương thức nào là tốt nhất? Theo ý tôi, tốt nhất là: hầu hết các trình duyệt tương thích, nhanh nhất, toàn diện nhất và có thể dự đoán được khi nói về hành vi. Danh sách các phương thức / thuộc tính tôi sử dụng làm bí danh:
var elem = document.getElementById('container');
var child = elem.children[0];
var child = elem.firstElementChild; // == children[0]
Điều này làm việc cho cả hai trường hợp:
var child = elem.childNodes[0]; // or childNodes[1], see below
Đó là trong trường hợp của các hình thức, hoặc <div>
lặp đi lặp lại. Nếu tôi có thể gặp các yếu tố văn bản:
var child = elem.childNodes; // treat as NodeList
var child = elem.firstChild;
Theo như tôi có thể làm việc, firstChild
sử dụng NodeList từ childNodes
và firstElementChild
sử dụng children
. Tôi dựa trên giả định này trên tài liệu tham khảo MDN:
childNode
là một tham chiếu đến phần tử con đầu tiên của nút phần tử hoặcnull
nếu không có phần tử nào .
Tôi đoán rằng, về mặt tốc độ, sự khác biệt, nếu có, sẽ không có gì, vì thực sự firstElementChild
là một tài liệu tham khảo children[0]
và children
dù sao đối tượng cũng đã có trong bộ nhớ.
Những gì không ném tôi, là childNodes
đối tượng. Tôi đã sử dụng nó để xem biểu mẫu, trong phần tử bảng. Mặc dù children
liệt kê tất cả các thành phần của biểu mẫu, childNodes
dường như cũng bao gồm khoảng trắng từ mã HTML:
console.log(elem.childNodes[0]);
console.log(elem.firstChild);
Cả hai bản ghi <TextNode textContent="\n ">
console.log(elem.childNodes[1]);
console.log(elem.children[0]);
console.log(elem.firstElementChild);
Tất cả các bản ghi <input type="text"
... >
. Làm thế nào mà? Tôi hiểu rằng một đối tượng sẽ cho phép tôi làm việc với mã HTML thô của HTML, trong khi các đối tượng khác dính vào DOM, nhưng childNodes
phần tử này dường như hoạt động ở cả hai cấp độ.
Để quay trở lại câu hỏi ban đầu của tôi, tôi đoán là: nếu tôi muốn đối tượng toàn diện nhất, childNodes
là cách để đi, nhưng vì tính toàn diện của nó, nó có thể không được dự đoán nhiều nhất về việc nó trả lại yếu tố tôi muốn / mong đợi tại bất kỳ thời điểm nào. Hỗ trợ nhiều trình duyệt cũng có thể chứng minh là một thách thức trong trường hợp đó, mặc dù tôi có thể sai.
Bất cứ ai có thể làm rõ sự phân biệt giữa các đối tượng trong tầm tay? Nếu có sự khác biệt về tốc độ, tuy nhiên không đáng kể, tôi cũng muốn biết. Nếu tôi thấy điều này là sai, hãy thoải mái giáo dục tôi.
PS: Làm ơn, làm ơn, tôi thích JavaScript, nên vâng, tôi muốn giải quyết vấn đề này. Các câu trả lời như Giao dịch jQuery với điều này cho bạn, không phải là những gì tôi đang tìm kiếm, do đó khôngjquery nhãn.