2010-07-01 3 views
13

Une question rapide .. quelle est la déclaration JAVASCRIPT pour obtenir les enfants immédiats d'une liste? J'ai essayé:enfants immédiats d'une liste

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

qui me donne tous les nœuds enfants.

Répondre

14
boucle

par:

document.getElementById(id).children

et obtenir ceux qui sont des éléments li (je pense qu'ils devraient tous être selon les spécifications)


Je pense que document.querySelectorAll('#id>li') s'il est pris en charge devrait fonctionner aussi bien. Voir: http://www.w3.org/TR/selectors-api/

+1

Hmm, on dirait que les enfants ne font pas partie d'une norme DOM, juste une partie de gecko et peut-être d'autres moteurs de rendu ... childNodes est probablement la meilleure réponse même si vous devez vérifier chaque élément de la liste. –

+0

est donc document.getElementById (id) .childNodes; cela m'obtiendrait seulement les enfants immédiats? – racky

+0

oui, notez que si vous avez installé firebug, vous pouvez voir ces deux listes dans la fenêtre de surveillance directement sur ce site avec une montre comme 'document.getElementsByTagName (" ul ") [0]' –

3

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

Notez que 'childNodes' contient tous les nœuds et seulement les éléments. – Gumbo

+0

merci @Gumbo - Je vais clarifier ce point dans la réponse plus tard. Cela ne devrait pas avoir d'importance pour les petites listes car nous testons 'nodeName', mais peut être inefficace pour les listes plus grandes. – Anurag

+2

Mieux vaut 'children [i] .nodeType === Node.ELEMENT_NODE' pour être sur que c'est vraiment un noeud d'élément. – Gumbo

2

Le même code plus rapide & mieux.

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); 
    } 
} 
Questions connexes