Liste des éléments enfant d'un autre élément [Résolu]

jdmcreator 656 Messages postés samedi 30 décembre 2000Date d'inscription 20 juillet 2012 Dernière intervention - 15 nov. 2009 à 03:19 - Dernière réponse :  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 !
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 15 nov. 2009 à 12:10
3
Merci
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

Merci Bul3 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Bul3
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 15 nov. 2009 à 11:40
0
Merci
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
Commenter la réponse de Bul3
jdmcreator 656 Messages postés samedi 30 décembre 2000Date d'inscription 20 juillet 2012 Dernière intervention - 15 nov. 2009 à 15:16
0
Merci
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 !
Commenter la réponse de jdmcreator
jdmcreator 656 Messages postés samedi 30 décembre 2000Date d'inscription 20 juillet 2012 Dernière intervention - 15 nov. 2009 à 15:29
0
Merci
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 !
Commenter la réponse de jdmcreator
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 15 nov. 2009 à 15:45
0
Merci
>>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( )
Commenter la réponse de Bul3
jdmcreator 656 Messages postés samedi 30 décembre 2000Date d'inscription 20 juillet 2012 Dernière intervention - 15 nov. 2009 à 15:52
0
Merci
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 !
Commenter la réponse de jdmcreator
jdmcreator 656 Messages postés samedi 30 décembre 2000Date d'inscription 20 juillet 2012 Dernière intervention - 15 nov. 2009 à 15:53
0
Merci
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 !
Commenter la réponse de jdmcreator
carpateml - 24 oct. 2012 à 17:14
0
Merci
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
Commenter la réponse de carpateml

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.