Partage
  • Partager sur Facebook
  • Partager sur Twitter

[DOM] une node vaut HTML Text

wtf ??!?

Sujet résolu
    24 juillet 2009 à 14:11:06

    Bonjour, comme mon script ne marche pas j'ai essayé de voir d'où venait l'erreur et j'ai trouvé !
    Je ne comprend pas pourquoi quand je fais ceci :
    alert(elmt + '\n' +
    elmt.parentNode + '\n' +
    elmt.firstChild + '\n' +
    elmt.lastChild + '\n' +
    elmt.previousSibling + '\n' +
    elmt.nextSibling + '\n' +
    elmt.childNodes[0]);
    

    Il me renvoi ceci :
    [object HTMLDivElement]
    [object HTMLBodyElement]
    [object Text]
    [object Text]
    [object Text]
    [object Text]
    [object Text]

    Pour les 2 premiers c'est bon, c'est bien un div et son parent est bien body.
    Mais pourquoi les autres valent object Text !!!
    Ps : je suis sous FF, sous ie de toutes façon ça marche pas :(
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2009 à 14:23:24

      Bah parce que certains navigateurs (tous ?) interprêtent le texte comme des éléments texte.
      Ajoute .nodeValue aux trucs dont il te dit que ce sont des noeuds texte... et tu verras ce qu'ils contiennent...
      • Partager sur Facebook
      • Partager sur Twitter
        24 juillet 2009 à 14:28:09

        Merci, mais là c'est encore pire ça n'affiche rien >_< (une alerte vide :'( )
        (je vais voir parce que j'ai l'impression que ça vient d'un autre problème du coup)
        • Partager sur Facebook
        • Partager sur Twitter
          24 juillet 2009 à 14:34:12

          Non, t'as des noeuds texte vide xD
          code choppé sur internet qui ressemble à peu près à un code bien fait que j'avais vu :
          function getnextsibling(el) { 
              while((el=el.nextsibling) && el.nodeType!=1); 
              return el; 
          }
          

          et au lieu de el.nextSibling, tu fais getnextSibling(el)

          Après, tu peux te recoder des fonctions dans le genre pour les autres trucs du genre :)
          • Partager sur Facebook
          • Partager sur Twitter
            24 juillet 2009 à 15:00:31

            Vraiment merci de ton aide, ta fonction marche, elle enlève bien les nœuds de texte vides.
            Le problème est qu'il ne trouve uniquement ça (alors que dans le code html il y a des éléments).
            Je vais essayer de coder une fonctions qui trouve le sibling suivant autrement.
            Pour ça j'avais pensé à ceci :
            function getNextSibling(elmt) { 
            	var parent = elmt.parentNode, num, children = parent.childNodes, sibling;
            	while(children[num] != elmt) {
            		num++;
            	}
            	for(var i = num; i < children.length; i++) {
            		if(children[num].nodeType != 1 && children[num].parent == elmt) {
            			return children[num];
            		}
            	}
            }
            

            Mais bon pour l'instant ça marche pas :euh:
            • Partager sur Facebook
            • Partager sur Twitter
              24 juillet 2009 à 15:02:05

              function getNextSibling(el) { 
              	while(el.nextsibling && el.nodeType!=1) {
              		el = el.nextsibling;
              	}
              	return el; 
              }
              

              Mais elle marche pas la fonction que je t'avais donné avant ?
              • Partager sur Facebook
              • Partager sur Twitter
                24 juillet 2009 à 15:19:32

                Ben non ça ne marche pas :(
                (ps : cette fonction est la même que celle d'avant mais en plus joli, non ?)
                En fait le problème vient du fait que elmt.nextsibling ne renvoi que des nodes texte vide alors qu'en réalité ça n'est pas le cas.
                Par contre j'ai améliorer ma fonction et maintenant ça marche :
                function getNextSibling(elmt) { 
                	var parent = elmt.parentNode, num, children = parent.childNodes, sibling;
                	for(num = 0; num < children.length; num++) {
                		if(children[num] == elmt) {
                			break;
                		}
                	}	
                	for(var i = num + 1; i < children.length; i++) {
                		if(children[i].nodeType == 1 && children[i].parentNode == parent) {
                			return children[i];
                		}
                	}
                }
                

                Merci quand même pour ton aide :D
                • Partager sur Facebook
                • Partager sur Twitter

                [DOM] une node vaut HTML Text

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown