2011-10-28 32 views

Trả lời

212

.children là tài sản của Element. Chỉ có Elements có con, và những đứa trẻ này đều là Element.

Tuy nhiên .childNodes là tài sản của Node. .childNodes có thể chứa bất kỳ nút nào.

Vì vậy, một ví dụ cụ thể sẽ là

var el = document.createElement("div"); 
el.textContent = "foo" 
el.childNodes.length === 1; // TextNode is a node child 
el.children.length === 0; // no Element children 

Tất nhiên .children là DOM4 để hỗ trợ trình duyệt là run rẩy, tuy nhiên nếu bạn sử dụng DOM-shim, các vấn đề trình duyệt chéo của bạn sẽ biến mất!

Hầu hết thời gian bạn muốn sử dụng .children vì thông thường bạn không muốn lặp lại TextNodes hoặc Nhận xét trong thao tác DOM của mình.

Nếu bạn muốn thao tác với TextNodes, bạn có thể muốn .textContent thay thế.

+3

Vâng, IE có vẻ như có một số vấn đề: http://www.quirksmode.org/dom/w3c_core.html#t71 –

+1

Trẻ em có thể là bất kỳ loại nào, không chỉ các phần tử HTML – david

+1

@david cái gì? "chỉ khớp các phần tử con". trẻ em chỉ có thể là các yếu tố – Raynos

16

Element.children chỉ trả về phần tử con, trong khi Node.childNodes trả về tất cả các nút con. Lưu ý rằng các phần tử là các nút, vì vậy cả hai đều có sẵn trên các phần tử.

Tôi tin rằng childNodes đáng tin cậy hơn. Ví dụ, MDC (liên kết ở trên) lưu ý rằng IE chỉ có children ngay trong IE 9. childNodes cung cấp ít chỗ cho lỗi của trình cài đặt trình duyệt.

+1

Darn, nếu chỉ điều này làm việc trên IE 6-8, nó sẽ là một giấc mơ trở thành sự thật. – Ryan

+2

@minitech nó hoạt động (đối với một số giá trị công việc). Rõ ràng '.children' không lọc ra các nút bình luận, nhưng nó lọc ra các nút văn bản. – Raynos

+1

@Raynos: Chính xác - giống với '.getElementsByTagName ('*')'. IE đôi khi có thể gây phiền nhiễu ... – Ryan

Các vấn đề liên quan