IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[DOM] items[i].getElementsByTagName().item ? ?


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut [DOM] items[i].getElementsByTagName().item ? ?
    salut tout le monde
    j'aimerai savoir comment fait-on pour afficher tous les elements qui se trouve au niveau de "item" ?

    items[i].getElementsByTagName().item()

    j ai essayé de faire une boucle du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(var j=0;j<items.length;j++)
    					html += items[i].getElementsByTagName("ingredient").item('j').firstChild.data + ' ,';
    mais ca n'affiche rien du tout
    i est incrementé aussi ya pas de probleme a ce niveau

    auriez vous une idée sur le sujet ?


    voici le bout de code en entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var items = reponse.getElementsByTagName("pizza");
    		var html = '';
    		html += '<tr><td>';
    		for(var i=0;i<items.length;i++)
    		{
    			if(items[i].getElementsByTagName("id").item(0).firstChild.data == num_pizza)
    			{
    				for(var j=0;j<items.length;j++)
    					html += items[i].getElementsByTagName("ingredient").item(j).firstChild.data + ' ,';
     
    			}
    		}

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Qu'as tu lorsque tu fais un alert de :
    items[i].getElementsByTagName("ingredient").item(j) ?

    aurais tu ton fichier xml associé ?

  3. #3
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    lorsque je fais un alert(items[i].getElementsByTagName("ingredient").item(j))
    il m affiche : [object Element]

    sinon oui mon fichier xml est associer car un peu plus haut dans mon code je peux afficher des données avec items[i].getElementsByTagName("id").item(0).firstChild.data

    deja ca me permet de voir que j ai nu probleme avc ma boucle

  4. #4
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    lol ben tout compte fait ca marche je sais pas par quel miracle lol
    j ai du mal ecrir un mot ou autre qui sait

  5. #5
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    aaaa finalement j'ai trouvé d'ou venait l erreur !
    en fait c'est lorsque je fais html += items[i].getElementsByTagName("ingredient").item(j).firstChild.data + ' ,'

    l'erreur est causé par html += des que je le met ca marche plus...question : pourquoi je ne peux pas rajouter mon resultat a ma chaine de caractere

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    essaye avec firstChild.innerHTML plutot que data ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    ok mais apparement mon prof vient de me dire que je n'etais pas en accord avc le DOM "faut pas tout mettre dans une chaine pour pour ensuite balancer dans le inner
    donc pour mon tableau je dois faire "createElement" etc ....

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    oui sauf que le .firstChild. n'est pas interprété de la même façon selon le navigateur et tu risque de remplir le mauvais element...

    sinon va faire un tour dans les contributions j'ai collé un code pour la création de tableaux ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    j 'ai essayé un truk de ce style la pour effectuer la creation d'un tableau avec le DOM mais apparement j'ai toujours mon soucis .. au meme endroit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function recup_pizza(xhr,num_pizza)
    {
    	if(xhr.readyState == 4)
    	{
    		var reponse = xhr.responseXML;
    		var items = reponse.getElementsByTagName("pizza");
    		/*var html = '';
    		html += '<tr><td>';*/		
    		//var bodyDoc = document.getElementsByTagName("body")[0];
    		var table     = document.createElement("table");
    		
    		for(var i=0;i<items.length;i++)
    		{
    			var tr = document.createElement('tr');		
    			
    			if(items[i].getElementsByTagName("id").item(0).firstChild.data == num_pizza)
    			{
    				for(var j=0;j<items.length;j++)
    				{
    					var td = document.createElement('td');
    					txt = document.createTextNode(items[i].getElementsByTagName("ingredient").item(j).firstChild.data);
    					td.appendChild(txt);
    					tr.appendChild(td);
    					//html += items[i].getElementsByTagName("ingredient").item(j).firstChild.data;				
    				}
    			}
    		}
    		table.appendChild(tr);
    		//bodyDoc.appendChild(table);
    		/*html += '</td></tr>';*/
    		document.getElementById('menu-gauche').appendChild(table);
    		
    	}
    	
    }
    comme ci il veut pas associer mon resultat a un element texte

    erreur obtenue avec la console de FF : Erreur : items[i].getElementsByTagName("ingredient").item(j) has no properties
    et pourtant lorsque je fais un alert de ce dernier ca m'affiche les valeurs

  10. #10
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    j'ai une tite evolution du code

    j'ai essayé ceci txt = document.createTextNode(items[i].getElementsByTagName("ingredient").item(0).childNodes[0].nodeValue);

    ca marche lorsque que item prend en dur 0 mais lorsque que je decide de faire une boucle pour tout recuperer (en mettant j donc) ben ca ne veut plus marcher
    j ai droit au meme message d'erreur

    ps : pourquoi le DOM c'est aussi vague et aussi chiant
    j'ai pas encore trouvé une doc m'expliquant chaque proprieté, a quel moment utiliser celle ci au lieu d'une autre etc

  11. #11
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    afficher tous les elements qui se trouve au niveau de "item" ?
    c'est-à-dire? tu veux obtenir quoi à l'écran? l'arborescence? le texte pur?

  12. #12
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    je veux le texte pur

    exemple : mon arbre xml est de la forme suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <element>
       <pizza>
            <nom>Reine</nom>
            <prix>15</prix>
            <ingredient>tomate</ingredient>
            <ingredient>oeuf</ingredient>
            <ingredient>jambon</ingredient>
       </pizza>
    </element>
    et je veux liste tous les ingredients...je veux recuperer tomate, oeuf et jambon

  13. #13
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    c'est bien ce qui me semblait; alors essaie ça:

    [voir ancien code source]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <script type="text/javascript"> 
     
    var texte;
    var inner;
     
    function go(n,arch){// arguments "body", "élément déclencheur à sauvegarder"
    texte="";
    // collecton de toutes les balises du body
    var bal=n.getElementsByTagName('*');
     
    // on parcourt toutes les balises
    for(i=0;i<bal.length;i++){
    // et tous leurs noeuds
    for(j=0;j<bal[i].childNodes.length;j++){
    // si un noeud texte est repéré
    if(bal[i].childNodes[j].data){
    // on ajoute son contenu à la chaîne "innerText"
    texte+=bal[i].childNodes[j].data+" "}}};
     
    // on crée un div
    inner=document.createElement('div');
    inner.style.border="solid 1px #ff0000";
    inner.style.width="400px";
    // en cliquant sur ce div, on restaurera le bouton de départ
    inner.onclick=function(){n.replaceChild(arch,this)};
     
    // on place la chaîne "innerText" dans le div
    inner.appendChild(document.createTextNode(texte));
    //on place le div en haut de page, à la place du bouton qui appelle la fonction
    n.replaceChild(inner,bal[0]);
    }
     
    </script> 
     
    </head> 
     
    <body>
     
    <p>
    <input type="button" value="voir le texte brut du document" onclick="go(document.body,this)" />
    </p>
    le but était dans ce script de récupérer tout le texte d'un document, mais tu peux mettre n'importe quel noeud en premier argument;
    pareil pour le déclenchement de la fonction: le bouton est optionnel;

    teste avec le contenu que tu veux, je n'ai jamais noté de bug;

  14. #14
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    figures toi que je n'ai pas reussi a faire ce que je voulais avec le code que tu m as fourni

    en fait je suis tres pres du but la c'est ce qui me soule le plus
    j arrive a afficher " 1 ingredient" mais j arrive pas a trouver ue boucle qui pourrait me permettre de les avoir tous

    question : comment faire pour avoir tout les noeuds d'un arbre qui porte le meme nom
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <element>
       <pizza>
            <nom>Reine</nom>
            <prix>15</prix>
            <ingredient>tomate</ingredient>
            <ingredient>oeuf</ingredient>
            <ingredient>jambon</ingredient>
       </pizza>
    </element>
    comment faire pour avoir les 3 ingredients ? j arrive a avoir que les tomates

  15. #15
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    eh bien par exemple avec le tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element_parent.getElementsByTagName("nom");

  16. #16
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    lol exemple mal conçu

    autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <element>
       <pizza>
            <nom>Reine</nom>
            <prix>15</prix>
            <ingredient>tomate</ingredient>
            <ingredient>oeuf</ingredient>
            <ingredient>jambon</ingredient>
       </pizza>
       <pizza>
            <nom>Napolitaine</nom>
            <prix>12</prix>
            <ingredient>fromage</ingredient>
            <ingredient>jambon</ingredient>
       </pizza>
    </element>
    comment faire pour avoir les 3 ingredients ? de la pizza Reine ! ou encore les 2 ingredients de la pizza Napolitaine !

    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    element_parent.getElementsByTagName("ingredient");
    ca me donne tous les ingredients, toutes pizzas confondu

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    faut boucler et tester ...

    boucler sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element_parent.getElementsByTagName("pizza");
    tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element_parent.getElementsByTagName("pizza")[i].getElemntsByTagName['nom'][0]
    et recupérer alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element_parent.getElementsByTagName("pizza")[i].getElementsByTagName('ingredients')
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  18. #18
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut

    ENFIIIIIIIIIInnnnnnnnnnn
    je commencais legerement a peter un cable sur ca la

    eh ben merci de m avoir mis sur la voie

    je met le code final au cas ou ca pourrait aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    var reponse = xhr.responseXML;
    		var items = reponse.getElementsByTagName("pizza");				
    		var table = document.createElement("table");
     
    		// on parcourt toutes les balises
    		for(var i=0;i<items.length;i++)
    		{			
     
     
    			/* me donne le nom des pizza
    			alert(reponse.getElementsByTagName("pizza")[i].getElementsByTagName('nom')[0].firstChild.data);
    			*/
     
    			if(reponse.getElementsByTagName("pizza")[i].getElementsByTagName('id')[0].firstChild.nodeValue == num_pizza)
    			{
    				for(j=0;j< reponse.getElementsByTagName("pizza")[i].getElementsByTagName('ingredient').length;j++){
    					alert(reponse.getElementsByTagName("pizza")[i].getElementsByTagName('ingredient')[j].firstChild.data);}
     
    			}
    		}

  19. #19
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    oui enfin tu n'est pas au bout de tes surprises si tu utilises firstChild sans nodeCleaner entre IE et FFX ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  20. #20
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    apparement ca marche sous IE et FF mais bon peux tu m expliquer comment ca marche (d apres ce que j ai suivi faut mettre ca au niveau de xhr.responseXML; ? ) si c'est ca j ai essayé mais ca marche pas

    EDIT : oups remarque inutile en fait j avais pas creer la fonction clean je pensais que c'etait une fonction standard

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [DOM] liste déroulante avec items transparents
    Par beegees dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/12/2011, 17h16
  2. [AC-2007] Incrémenter un code Item selon l'Item précédent.
    Par shmider dans le forum IHM
    Réponses: 2
    Dernier message: 02/11/2010, 12h37
  3. TTreeView : création d'item et sous item
    Par greg38bj dans le forum Composants VCL
    Réponses: 3
    Dernier message: 29/05/2008, 15h35
  4. Réponses: 3
    Dernier message: 27/11/2006, 15h50
  5. [vbscript][DOM]pb avec getElementsByTagName...
    Par toyyo dans le forum APIs
    Réponses: 2
    Dernier message: 16/02/2005, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo