Liste des éléments enfant d'un autre élément

Résolu
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 - 15 nov. 2009 à 03:19
 carpateml - 24 oct. 2012 à 17:14
Bonjour,

Je viens de rencontrer un obstacle que je tente depuis 1 semaine j,essaye de résoudre sans trouver de solution.

Je cherche si il existe une façon de récupérer les éléments enfant d'un autre élément.

Il existe bien childNode, mais voilà son problème : il ne retourne que l'enfant au premier degré. Voici un petit schéma d'arborescence pour m'expliquer :

HTML > BODY > P > DIV > SPAN > B

Admettons que je veux récupérer tout les enfants de BODY. childNode ne me retournera que P et ses éléments frères, alors que je souhaiterais qu'il me retourne P,DIV,SPAN,B et bien sûr tous les éléments frères ;)

J'espère mettre bien faite comprendre ;)

Quelqu'un a-t-il une solution à proposer ?

Merci d'avance

JDMCreator
--------
Participez au nouveau projet : la wiki sur le javascript !
A voir également:

8 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 nov. 2009 à 12:10
ch'tiot exemple
<html> 
 


 
 

 



 





 

 		


<script>
function appel(quoi)
{	alert(quoi.tagName);
for ( var n=0; n<quoi.childNodes.length; n++ )
{	appel(quoi.childNodes[n]);	}
}
appel(document.getElementsByTagName('html')[0]);
</script>

</html>
vous verrez qu'avec certains navigateurs
des undefined sont affichés, je vous laisse
comprendre pourquoi et rectifier
3
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 nov. 2009 à 11:40
Bonjour,
votre "fonction de recherche" des éléments
doit être fait de manière récursive :
pour chaque élément trouvé il faut
lancer votre "fonction de recherche".
Cordialement
0
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 7
15 nov. 2009 à 15:16
Merci pour cette exemple, je retrouve enfin l'espoir

Quand aux undefined, j'avais déjà rencontré ce problème et j'ai compris pourquoi ils apparaissaient :

childNodes retourne TOUS les éléments enfants : donc pas juste les éléments HTML, mais les noeud Texte et peut-être aussi les noeuds attributs. Comme ceux-ci ne supporte pas la propriété tagName, cela retourne undefined. Il peut être réglé ainsi :

if(quoi.childNodes(n).nodeType==1)
{...}

Merci beaucoup encore ;)


JDMCreator
--------
Participez au nouveau projet : la wiki sur le javascript !
0
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 7
15 nov. 2009 à 15:29
Voilà le code que ça me donne finalement = )

<html> 
 


 
 
  
 



 





 

 		


<script>
startCall_arr =new Array();

function startCall(quoi){
startCall_arr=new Array();
appel(quoi);



return startCall_arr;
}
function appel(quoi)
{

if(quoi.nodeType==1)
{	

startCall_arr.push(quoi);

for ( var n=0; n<quoi.childNodes.length; n++ )
{	
appel(quoi.childNodes[n]);
}

}

}
alert(startCall(document.getElementsByTagName('html')[0]));
</script>

</html>




JDMCreator
--------
Participez au nouveau projet : la wiki sur le javascript !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 nov. 2009 à 15:45
>>childNodes retourne TOUS les éléments enfants :
>>donc pas juste les éléments HTML,
exact
et nodeName,nodeType voire nodeValue
et autres node??? permettent de savoir à qui
on a affaire ( et c'est différent en
fonction des navigateurs ;o( )
0
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 7
15 nov. 2009 à 15:52
Non, uniquement nodeType fait la différence. Il est d'ailleurs utiliser dans la fonction pour savoir si l'élément est un élément HTML dans Prototype.js

NodeName retourne le nom. Dans le cas d'élément HTML, ce sera le tagName.

Quand à NodeValue, il retourne la valeur d'un noeud. Pour un élément HTML, il retourne null


JDMCreator
--------
Participez au nouveau projet : la wiki sur le javascript !
0
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 7
15 nov. 2009 à 15:53
J'ai oublié de mettre le lien : http://fr.selfhtml.org/javascript/objets/node.htm#node_type


JDMCreator
--------
Participez au nouveau projet : la wiki sur le javascript !
0
Bonjour !
Je tente d'utiliser votre moteur de recherche ASE, sous Firefox. Mais une erreur bloque le déroulement du script "ASEJSFull.js" (en localhost).
Une fenêtre s'ouvre dans le navigateur invitant à continuer le script ou à l'interrompre. En continuant l'indexation du site reprend et se poursuit jusqu'à son terme. La ligne incriminée par l'alerte est :

appel(quoi.childNodes[n]);

dans :

function startCall(quoi){
startCall_arr=new Array();
appel(quoi);



return startCall_arr;
}
function appel(quoi)
{

if(quoi.nodeType==1)
{

startCall_arr.push(quoi);

for ( var n=0; n<quoi.childNodes.length; n++ )
{
appel(quoi.childNodes[n]);
}

}

}

Je ne suis qu'un amateur tentant de développer lui-même son propre site web ; j'achoppe sur ce problème. Pourriez-vous m'indiquer la, ou une solution à celui-ci ?
Merci !
carpat.eml@free.fr
0
Rejoignez-nous