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 :

parsing HTML en JS entre IE/FF


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 3
    Par défaut parsing HTML en JS entre IE/FF
    Hello,
    J'aimerais créer un menu déroulant a 3 niveaux avec un HTML du type
    <ul>
    <li>
    <ul>
    <li></li>
    <li></li>
    .........................
    </ul>
    </li>
    </ul>

    pour ce faire j'ai fait un JS que voici :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    function buildsubmenus(){
     
    	var liTags 				= $('menu').getElementsByTagName("ul")[0].childNodes;
    	var currentNumItemSel	= '';
    	var defaultSelElem		= '';
     
    	for (var i = 0; i < liTags.length; i++){
    		showFirstNav(liTags[i],i);
    		if(liTags[i].className == 'selected'){
    			defaultSelElem = i;
    		}
    	}
     
    	function showFirstNav(item2Show,numItem){
     
    		item2Show.onmouseover 	= function(){
    			if(currentNumItemSel){
    				currentItemSel 		= liTags[currentNumItemSel].childNodes;
    				if(currentItemSel[3]){
    					hideItem(currentItemSel[3]);
    					liTags[currentNumItemSel].className = "";
    				}
    			}else{
    				liTags[defaultSelElem].className = "";
    				hideItem(liTags[defaultSelElem].childNodes[3]);
    			}
     
    			currentNumItemSel 	= numItem;
    			currentNode 		= item2Show.childNodes;
     
    			if(currentNode[3]){
    				showItem(currentNode[3]);
    				liTags[currentNumItemSel].className = "selected";
    				showNextNav(currentNode[3].childNodes);
    			}
    		}
     
    	}
     
    	function showNextNav(nnElem){
    		for (var i = 0; i < nnElem.length; i++){
    			nextItem = nnElem[i].childNodes;
    			if(nextItem.length > 1){
    				nnElem[i].onmouseover = function(){
    					showItem(this.childNodes[1]);
    				}
    				nnElem[i].onmouseout = function(){
    					hideItem(this.childNodes[1]);
    				}
    			}
    		}
    	}
     
    	function hideItem(navItem){
    		navItem.style.display = "none";
    	}
     
    	function showItem(navItem){
    		navItem.style.display = "block";
    	}
     
    }
    Donc ce que je fais grossomodo c'est que je prend tout les <li> de premier niveau au quel je leur applique un événement de survolle puis je m'occupe des enfants de ce même <li>

    Le problème vient de cette ligne (ligne 25 ) (entre autre, mais si je règle ce problème, je règle les autres )
    liTags[defaultSelElem].childNodes[3]

    le truc c'est que le childNodes[3] en FF correspond a un tag <ul> et en IE ca correspond a je sais pas trop bien quoi par contre si je fait ceci liTags[defaultSelElem].childNodes[2] ca fonctionne dans IE mais plus dans FF, j'ai bien essayer de faire un liTags[defaultSelElem].childNodes.getElementsByTagName("ul") mais ca me gènère un bug...

    Un solution ?
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    L'explication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ul>
    <li>
    </li>
    </ul>
    Pour FF, chaque saut de ligne est un noeud, pour IE non.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    oui le souci provient de la différence d'interprétation des childNodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liTags[currentNumItemSel].childNodes;
    le decompte IE et FFX diffère ...

    Fais une recherche sur le forum avec le mot "nodeCleaner"
    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 !

Discussions similaires

  1. Parsing HTML et récupération de données
    Par Stormy31 dans le forum VB.NET
    Réponses: 4
    Dernier message: 14/01/2009, 13h31
  2. [ODS HTML] Enlever ligne entre deux tableaux
    Par maverik40 dans le forum ODS et reporting
    Réponses: 4
    Dernier message: 26/11/2008, 16h46
  3. Réponses: 0
    Dernier message: 03/11/2008, 15h12
  4. HTMLCXX & Parsing HTML
    Par Eric45 dans le forum C++
    Réponses: 1
    Dernier message: 13/11/2007, 18h28
  5. [HTML/CSS]Espace entre images
    Par Psykorel dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 19/06/2006, 11h42

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