2010-07-01 34 views
13

Câu hỏi nhanh .. câu lệnh JAVASCRIPT là gì để có được các con ngay lập tức của một DANH SÁCH? Tôi đã thử:trẻ em ngay lập tức của một danh sách

document.getElementById(id).getElementsByTagName('li'); 

cung cấp cho tôi tất cả các nút con.

Trả lời

14

lặp qua:

document.getElementById(id).children

và nhận được những cái mà là những yếu tố li (Tôi nghĩ rằng tất cả họ nên được theo spec)


Tôi nghĩ rằng document.querySelectorAll('#id>li') nếu nó được hỗ trợ nên làm việc là tốt. Xem: http://www.w3.org/TR/selectors-api/

+1

Hmm, có vẻ như trẻ em không phải là một phần của tiêu chuẩn DOM, chỉ là một phần của tắc kè và có lẽ các công cụ hiển thị khác ... childNodes có lẽ là câu trả lời hay hơn ngay cả khi bạn phải kiểm tra từng phần tử trong danh sách. –

+0

cũng vậy là document.getElementById (id) .childNodes; điều đó sẽ chỉ cho tôi những đứa trẻ ngay lập tức? – racky

+0

có, lưu ý rằng nếu bạn đã cài đặt firebug, bạn có thể thấy cả hai danh sách này trong cửa sổ xem ngay trên trang web này với một chiếc đồng hồ như 'document.getElementsByTagName (" ul ") [0]' –

3

Node.childNodes hoặc Element.children

var listItems = []; 

var children = elem.childNodes; 
for(var i = 0; i < children.length; i++) { 
    if(children[i].nodeName == "LI") { 
     listItems.push(children[i]); 
    } 
} 
+1

Lưu ý rằng 'childNodes' chứa tất cả các nút và chỉ các phần tử. – Gumbo

+0

cảm ơn @Gumbo - Tôi sẽ làm rõ điểm đó trong câu trả lời sau. Không nên quan trọng đối với các danh sách nhỏ khi chúng tôi đang thử nghiệm bởi 'nodeName', nhưng có thể không hiệu quả đối với các danh sách lớn hơn. – Anurag

+2

Sử dụng tốt hơn 'trẻ em [i] .nodeType === Node.ELEMENT_NODE' để đảm bảo đó thực sự là nút phần tử. – Gumbo

2

Cùng một mã nhanh hơn & tốt hơn.

var listItems = []; 
var children = element.childNodes; 
for(var i = 0, l=children.length; i<l; ++i) { 
    var child = children[i]; 
    if(child.nodeType === 1 && child.tagName === "LI") { 
     listItems.push(child); 
    } 
} 
Các vấn đề liên quan