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] DOM avec <table> dans <div>


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Points : 31
    Points
    31
    Par défaut [DOM] DOM avec <table> dans <div>
    Bonjour, j'ai le cas suivant dans une JSP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <div id="listUser" style="visibility:hidden;">
    	<table id="nodeTable">
    		<tr>
    			<td>nom</td>
    			<td>age</td>
    		</tr>
    	</table>
    </div>
    Ce tableau est pour le moment vide et je voudrais le remplir en Javascript en utilisant DOM avec un fichier xml récupéré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    xhr_object.onreadystatechange = function() {
    	if (xhr_object.readyState == 4) {
    	    if (xhr_object.status == 200) {
    	        var message = xhr_object.responseXML.getElementsByTagName("rootElement")[0];
    	        updateHtmlData(message);
    	    }
    }
    Le fichier 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
    10
    11
    12
    13
     
    <rootElement>
       <liste>
          <personne>
             <nom>toto</nom>
             <age>31</age>
          </personne>
          <personne>
             <nom>titi</nom>
             <age>27</age>
          </personne>
       </liste>
    </rootElement>
    Pour parser le fichier xml de retour, aucun probleme.
    Mais maintenant, je voudrais remplir mon tableau.
    Pour cela j'essais d'atteindre le tag <table> pour y insérer une nouvelle série de <tr><td>#data_nom</td><td>#data_prenom</td></tr>

    Pour cela, je fais de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var div = document.getElementById("listUser");
    Je récupère bien un élement DOM qui est le div.
    Par contre, impossible par la suite de naviguer dedans pour atteindre le <table> et lui adjoindre des Childs...
    Si je fais :
    Ca me retourne false comme si il n'y avait rien dessous...
    J'ai essayé pleins d'autre méthode mais ca me dit toujours qu'il n'y a rien en dessous
    Si, j'essais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(div.getAttributeNode("nodeTable").name);
    C'est pas bon, car cela me dit "Objet requis"...

    Bref, impossible d'accéder au bon endroit et je ne suis pas encore à l'aise avec la manipulation d'un objet DOM.

    Quelqu'un saurait comment faire ou aurait une piste ?

    Par avance merci.
    Mavvv

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Bon, en fait, je finissais par mélanger plusieurs syntaxes donc un poil galère...
    Disont que j'ai résolu une partie du probleme en faisant de la sorte :

    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
    var div = document.getElementById("listUser");
    			    var messageText="";		
     
     
     
    	    var table = div.childNodes[0];
    	    // nombre de TR pour clean futur
     
    	    var index = message.childNodes.length;
    		alert(table.childNodes.length);
    	    for (var i=0; i < index ; i++) {
    	    	var node = message.childNodes[i];
     
    			var row = document.createElement('tr'); 
    			var container = document.createElement('td'); 
    			var theData = document.createTextNode(node.childNodes[0].childNodes[0].nodeValue + node.childNodes[1].childNodes[0].nodeValue); 
    			container.appendChild(theData); 
    			row.appendChild(container); 
     
    			container = document.createElement('td'); 
    			theData = document.createTextNode(node.childNodes[2].childNodes[0].nodeValue); 
    			container.appendChild(theData); 
    			row.appendChild(container);
    			table.appendChild(row); 
    	    }
    avec coté html une orga ultra basique de la sorte pour rappel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div id="listUser" style="visibility:visible;"><table><tr><td>nom</td><td>age</td></tr></table></div>
    Face à cela, j'aurais deux questions dont une je crois qui a déja trouvée réponse dans des precedents posts donc je vais chercher.
    Sous ffx, effectivement, il y a bien plus de childs que coté IE ce qui pose un probleme pour les traiter.
    Pour l'instant, j'ai contourné le pb en n'indentant pas du tout mon code mais si pour l'instant, je fais juste un truc d'exemple, une fois sa mise en place dans le dev projet propre, ca va devenir vite galère.

    Le deuxieme point lui concerne le retour...
    sous ffx, effectivement, j'ai bien deux lignes qui s'affichent ce qui est normal car j'ai deux enregs dans mon xml de retour.
    Le seul hic est coté IE, rien ne s'affiche...
    Par contre, si je compte les childs <tr> sous le node <table>, il m'en compte bien 3 (celui des titres présent par défaut et les deux que je rajoute)... Une idée ???

    mavvv qui cherche, trouve, cherche la suite, trouve et fait partager tout le monde ! ^^

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Excusez, chuis un boulet...
    Bon, en fait, j'ai réussis à répondre à mes deux questions au final donc meme si ca interesse qelqu'un, j'indique la réponse au cas ou.

    concernant la différence entre IE et ffx au niveau du nombre de childnodes, j'ai utilisé un cleaner proposé ici par siddh:
    http://www.developpez.net/forums/vie...&highlight=dom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function clean(n){ 
       for(i=0;i<n.length;i++){ 
          var t=[n[i].previousSibling,n[i].nextSibling]; 
          for(j=0;j!=2;j++){ 
             if(t[j] && t[j].nodeType==3){ 
                if(!/\S/.test(t[j].data)){ 
                   n[i].parentNode.removeChild(t[j]) 
                } 
             } 
          } 
       } 
    }
    Concernant ce probleme de non affichage coté IE, cela ne venait pas d'un probleme de nombre de child différent en IE et FFX mais du fait que FFX est plus tolérant qu'IE.
    Car si on relis mon code, lorsque je faisais un table.appendChild(Row), je positionait mon <TR> sous le <TABLE>.
    J'avais comme qui dirait légèrement oublié le <TBODY> entre les deux.
    Je me retrouvais donc avec une structure
    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
     
    <table>
    ------<tbody>
    ------------<tr>
    ------------------<td>nom</td>
    ------------------<td>age</td>
    ------------</tr>
    ------</tbody>
    ------<tr>
    ------------<td>toto</td>
    ------------<td>31</td>
    ------<tr>
    ------<tr>
    ------------<td>titi</td>
    ------------<td>27</td>
    ------<tr>
    </table>
    il suffisait donc de faire l'appenChild du Row au niveau du TBODY et non du TABLE.

    Boarf... au moins, cela m'aura fait une pause internet entre deux prises de tete !! ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Div scrollable avec item (centrer item dans la div sur le clic )
    Par jameson dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/06/2014, 17h09
  2. Requête avec trois tables : doublons dans mes résultats
    Par botitine dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/03/2014, 14h02
  3. [CS4] background avec des <table> et non des <div> ?
    Par toinoudu85 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 02/02/2010, 09h34
  4. [DOM] DOM : createElement d'une balise script dans le HEAD
    Par Mike_69 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/04/2007, 14h31
  5. Table html dans un Div
    Par youcef81 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 27/12/2006, 15h15

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