2010-07-01 14 views
13

Szybkie pytanie. Jakie jest oświadczenie JAVASCRIPT, aby uzyskać bezpośrednie dzieci z LISTY? Próbowałem:najbliższe dzieci z listy

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

który daje mi wszystkie węzły podrzędne.

Odpowiedz

14

pętli:

document.getElementById(id).children

i uzyskać te, które są elementy li (myślę, że wszystkie one powinny być według specyfikacji)


Myślę, że document.querySelectorAll('#id>li'), jeśli jest obsługiwany, powinien również działać. Zobacz: http://www.w3.org/TR/selectors-api/

+1

Hmm, wygląda na to, że dzieci nie są częścią standardu DOM, tylko częścią gecko i być może innych silników renderujących ... childNodes jest prawdopodobnie lepszą odpowiedzią, nawet jeśli trzeba sprawdzić każdy element listy. –

+0

tak samo jest z document.getElementById (id) .childNodes; to dostarczyłoby mi tylko najbliższe dzieci? – racky

+0

tak, należy pamiętać, że jeśli masz zainstalowany firebug, możesz zobaczyć obie te listy w oknie podglądu na tej stronie za pomocą zegarka, takiego jak 'document.getElementsByTagName (" ul ") [0]' –

3

Node.childNodes lub 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

Zwróć uwagę, że 'childNodes' zawiera wszystkie węzły i tylko elementy. – Gumbo

+0

dzięki @Gumbo - wyjaśnię ten punkt później w odpowiedzi. Nie powinno mieć znaczenia dla małych list, ponieważ testujemy przez 'nodeName', ale może być nieskuteczne w przypadku większych list. – Anurag

+2

Lepiej użyj 'children [i] .nodeType === Node.ELEMENT_NODE', aby upewnić się, że to naprawdę węzeł elementu. – Gumbo

2

Lepiej ten sam kod: &.

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); 
    } 
} 
Powiązane problemy