2010-07-01 14 views
13

Eine kurze Frage .. Was ist die JAVASCRIPT-Anweisung, um die unmittelbaren Kinder einer Liste zu bekommen? Ich habe versucht:sofortige Kinder einer Liste

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

, die mir alle der Kind-Knoten gibt.

Antwort

14

Schleife durch:

document.getElementById(id).children

und diejenigen erhalten, die li-Elemente sind (ich glaube, sie alle nach spec sein sollte)


Ich denke document.querySelectorAll('#id>li') wenn es unterstützt wird, sollte auch funktionieren. Siehe: http://www.w3.org/TR/selectors-api/

+1

Hmm, sieht aus wie Kinder nicht Teil eines DOM-Standards, nur Teil von Gecko und vielleicht anderen Rendering-Engines ... childNodes ist wahrscheinlich die bessere Antwort, auch wenn Sie jedes Element der Liste überprüfen müssen. –

+0

so ist das document.getElementById (id) .childNodes; das würde mir nur die unmittelbaren Kinder bringen? – racky

+0

Ja, beachten Sie, dass wenn Sie einen Firebug installiert haben, diese beiden Listen im Watch-Fenster auf dieser Seite mit einer Uhr wie 'document.getElementsByTagName (" ul ") [0]' –

3

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

Beachten Sie, dass 'childNodes' alle Knoten und nur Elemente enthält. – Gumbo

+0

danke @Gumbo - Ich werde diesen Punkt in der Antwort später klären. Sollte für kleine Listen nicht von Bedeutung sein, wie wir es mit 'nodeName' testen, kann aber für größere Listen ineffizient sein. – Anurag

+2

Verwenden Sie besser 'children [i] .nodeType === Node.ELEMENT_NODE', um sicherzustellen, dass es sich wirklich um einen Elementknoten handelt. – Gumbo

2

Der gleiche Code schneller & besser.

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); 
    } 
} 
Verwandte Themen