Comment obtenir tous les Noms d'enfants dans JS, y compris tous les «petits-enfants»?

Je veux analyser un div pour tous les Noms d'enfant, y compris ceux qui sont nichés dans d'autres éléments. À l'heure actuelle, j'ai ceci:

var t = document.getElementById('DivId').childNodes; for(i=0; i<t.length; i++) alert(t[i].id); 

Mais il ne reçoit que les enfants de la Div et pas les petits-enfants. Merci!

Modifier: Cette question était trop vague. Désolé pour ça. Voici un violon:

Http://jsfiddle.net/F6L2B/

Le script body.onload ne s'exécute pas chez JSFiddle, mais cela fonctionne, sauf que les champs de saisie "Me Second" et "Me Third" ne reçoivent pas de tabIndex et sont donc ignorés.

C'est le moyen le plus rapide et le plus simple, et cela fonctionne sur tous les navigateurs:

 myDiv.getElementsByTagName("*") 

Si vous recherchez tous les HTMLElement sur les navigateurs modernes, vous pouvez utiliser:

 myDiv.querySelectorAll("*") 

Qu'en est-il des arrière-arrière-petits-enfants?

Pour aller de manière arbitraire, vous pouvez utiliser une fonction récursive.

 var alldescendants = []; var t = document.getElementById('DivId').childNodes; for(i = 0; i < t.length; i++) if (t[i].nodeType == 1) recurseAndAdd(t[i], alldescendants); function recurseAndAdd(el, descendants) { descendants.push(el.id); var children = el.childNodes; for(i=0; i < children.length; i++) { if (children[i].nodeType == 1) { recurseAndAdd(children[i]); } } } 

Si vous ne voulez vraiment que des petits-enfants, vous pouvez supprimer la récurrence (et renommer probablement la fonction)

 function recurseAndAdd(el, descendants) { descendants.push(el.id); var children = el.childNodes; for(i=0; i < children.length; i++) { if (children[i].nodeType == 1) { descendants.push(children[i].id); } } }