2012-08-02 28 views
16
<ul> 
    <li>Array1</li> 
    <li>Array2</li> 
    <li id="element">Array3</li> 
</ul> 
<script> 
    var temp = document.getElementById('element').parentNode; 
    child = temp.childNodes; 
    console.log(temp.length); 
</script> 

Tôi cần có độ dài nút con bằng cách sử dụng id phần tử. Mã của tôi trả về 7 kết quả nhưng tôi chỉ có 3 nút.Javascript - số nút con

+2

thể trùng lặp của [Sử dụng javascript để đếm phần tử con mắt của một phần tử] (http://stackoverflow.com/questions/5685184/use-javascript-to-count-immediate-child-elements-of- một phần tử) - vui lòng sử dụng tìm kiếm trước khi bạn đặt một câu hỏi mới. –

+0

Tôi chấp nhận bạn .. Nhưng tôi cần câu trả lời javascript tinh khiết không jquery –

+0

Nếu bạn đọc câu trả lời cẩn thận, bạn sẽ thấy rằng nó không sử dụng jQuery ở tất cả/ –

Trả lời

16

Điều gì bạn muốn là .children.length hoặc .childElementCount (không được khuyến nghị) kể từ childNodes được tất cả ChildNodes, cũng là các nút văn bản 4 trong trường hợp của bạn (dấu ngắt dòng).

var temp = document.getElementById('element').parentNode; 
child = temp.children; 
console.log(child.length); 
// or the following 
console.log(temp.childElementCount); 
+0

Tôi nhận được lỗi trong FF getChildren không phải là một chức năng –

+0

@KarthickV sử dụng '.children' này sẽ trả về một bộ sưu tập html và có hỗ trợ tốt hơn. Xem [docu here] (https://developer.mozilla.org/en/DOM/Element.children) – Christoph

+0

@KarthickV một lưu ý quan trọng: trẻ em chúng ta sử dụng đúng, nhưng nó là lỗi trong các trình duyệt IE cũ - nó đếm các nút bình luận ' 'quá! Vì vậy, hãy nhận biết điều đó. – Christoph

6

childNodes trả về 3 mục danh sách, nội dung văn bản và khoảng trắng giữa chúng (mặc dù không có trong tất cả các trình duyệt). Ba lựa chọn:

  1. FF và Chrome: elem.childElementCount (sẽ trở lại 3)

  2. IE (& & FF AFAIK): elem.childNodes.length (=== 3)

  3. IE cũ: elem.children.length

+0

làm việc tốt của nó Trong FF –

+0

@KarthickV: Tôi đã kiểm tra 'childNodes. length', nó không hoạt động trong chrome (không biết những gì tôi đã suy nghĩ) chỉnh sửa câu trả lời của tôi ... cũng: Ai downvoted câu trả lời của tôi, và tại sao? –

+0

nó hoạt động tốt cho tôi (chrome: temp.childElementCount) .. không biết ai xuống bình chọn .. Sẽ cho một phiếu bầu lên .. Cảm ơn câu trả lời quý giá của bạn –

2

Thuộc tính childrenNodes bao gồm tất cả các loại nút: TEXT_NODE, EL EMENT_NODE, COMMEN_NODE, vv ....

Bạn cần phải đếm số lượng các yếu tố, đây là an example solution dựa trên DOM mà nên làm việc trong tất cả các động cơ:

var temp = document.getElementById('element').parentNode; 
var children = temp.childNodes; 
console.log(children.length); // 7 

function countElements(children) { 
    var count=0; 
    for (var i=0, m=children.length; i<m; i++) 
    if (children[i].nodeType===document.ELEMENT_NODE) 
     count++; 
    return count; 
} 
console.info(countElements (children));​ // 3 

EDIT

Tương tự nếu bạn muốn có một hàm để truy xuất tất cả các phần tử con chỉ sử dụng DOM, đây là một hàm:

function childElements(node) { 
    var elems = new Array(); 
    var children = node.childNodes; 

    for (var i=0,i < children.length ; i++) { 
     if (children[i].nodeType===document.ELEMENT_NODE) { 
      elems.push(children[i]); 
      return elems; 
      } 
     } 
    } 

console.info(childElements(temp).length);​ //3 
Các vấn đề liên quan