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] Modification du style en fonction du grand-parent ?!


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut [DOM] Modification du style en fonction du grand-parent ?!
    Bonjour à tous,

    je construis un tableau dynamiquement grâce à du J2EE, je ne connais donc pas le contenu qu'il aura !

    Je souhaite pourtant changer la couleur du contenu des TDs ayant pour "class" : "txt" et ayant pour grand-parent une balise "TBODY".

    J'ai fait des tests, à priori mon code est bon, mais en fait non ... ça fonctionne pas !

    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
    [...]
    <script type="text/javascript">
    	function modifStyle() {
            var i, oTD;
            var allTDs = document.getElementsByTagName("td");
            var n = allTDs.length;
     
            for (i=0 ; i<n ; i++)
            {
                oTD = allTDs[i];
     
                var tagPere = oTD.parentElement;
                var tagGdPere = tagPere.parentElement;
     
                if (oTD.className == "txt" && tagGdPere.nodeName == "TBODY")
                {
                	switch (oTD.innerHTML)
    				{
    					case "2":
    					  oTD.style.color = "navy";
    					  break;
    					case "3":
    					  oTD.style.color = "purple";
    					  break;
    					case "4":
    					  oTD.style.color = "#E72100";
    					  break;
    					case "5":
    					  oTD.style.color = "#ED7F10";
    					  break;
    					case "6":
    					  oTD.style.color = "#FCD21C";
    					  break;
    					case "7":
    					  oTD.style.color = "#008B00";
    					  break;
    					default:
    					  oTD.style.color = "black";
    				}
     
                    oTD.style.fontWeight = "bold";
                }
            }
    	}
    </script>
    </head>
    <body onload="modifStyle()">
    [...]
    Résultat : Pas d'erreur JS et rien n'est modifié dans ma page !


    Gôm
    Quand on n'a pas d'tête, on a ...

  2. #2
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    En fait (problème de cache ie ...), cela modifie bien tous mes éléments, mais sans prendre en compte que le grand-parent doit être une balise "TBODY" !

    Concrètement, tous les <TD class="txt" ...> où est présent un chiffre, compris entre 2 et 6 inclus, sont modifiés !
    Quand on n'a pas d'tête, on a ...

  3. #3
    Membre confirmé Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Points : 460
    Points
    460
    Par défaut
    t'as pas essayé de faire ça diectement dans ta feuille de style css ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tbody>tr>td.txt { ... }

  4. #4
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Impossible !

    Je ne vais pas faire un Switch Case en CSS ! Si ?


    De plus, j'ai d'autres pages correspondant à cette class et je ne veux pas que leur contenu soit coloré !
    Quand on n'a pas d'tête, on a ...

  5. #5
    Membre confirmé Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Points : 460
    Points
    460
    Par défaut
    je te dis pas de faire un switch-case, mais simplement en définissant un chemin unique (en utilisant un id ou une classe spécifique pour le "grand parent" concerné, tu évites tout problème de scriptage, tu n'as qu'une recherche dans un arbre à l'aide d'instructions CSS ...

  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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    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
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tagGdPere.nodeName == "TBODY"
    es-tu sûr que la valeur retournée par nodeName est en majuscules ? Sinon :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tagGdPere.nodeName.toUpperCase() == "TBODY"

    ou essaye de voir avec le tagName :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tagGdPere.tagName.toLowerCase() == "tbody"

  8. #8
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Non, malheureusement ça ne change rien !

    Si je modifie ainsi mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		        for (i=0 ; i<n ; i++)
    		        {
    		            oTD = allTDs[i];
     
    		            var tagPere = oTD.parentElement;
    		            var tagGdPere = tagPere.parentElement;
     
    		            alert("Nom de la balise "+tagGdPere.nodeName)
     
    		            if (oTD.className == "txt" && tagGdPere.nodeName.toUpperCase() == "TBODY")
    		            {
    		            	switch (oTD.innerHTML)
    						{
    Le "alert" me renvoie tout le temps "TBODY" ... alors que parfois le grand-parent est directement "TABLE" ?!
    Quand on n'a pas d'tête, on a ...

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par SpaceFrog

  10. #10
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tagGdPere = oTD.parentNode.parentNode;
    Ne fonctionne pas non plus !
    Quand on n'a pas d'tête, on a ...

  11. #11
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    je me sers régulièrement de parentNode et cela fonctione très bien ...


    essaye de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     alert(oTD.parentNode.parentNode.tagName);
    ça te permettra au moins de savoir si tu cible le bon élément ...
    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 !

  12. #12
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    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
    			function modifStyle() {
    		        var i, oTD;
    		        var allTDs = document.getElementsByTagName("td");
    		        var n = allTDs.length;
     
    		        for (i=0 ; i<n ; i++)
    		        {
    		            oTD = allTDs[i];
     
    		            alert(oTD.parentNode.parentNode.tagName);
     
    		            var tagGdPere = oTD.parentNode.parentNode;
     
    		            if (oTD.className == "txt" && tagGdPere.tagName.toUpperCase() == "TBODY")
    		            {
    		            	switch (oTD.innerHTML)
    						{
    							case "2":
    							  oTD.style.color = "navy";
    							  break;
    							case "3":
    							  oTD.style.color = "purple";
    							  break;
    							case "4":
    							  oTD.style.color = "#E72100";
    							  break;
    							case "5":
    							  oTD.style.color = "#ED7F10";
    							  break;
    							case "6":
    							  oTD.style.color = "#FCD21C";
    							  break;
    							case "7":
    							  oTD.style.color = "#008B00";
    							  break;
    							default:
    							  oTD.style.color = "black";
    						}
     
    		                //oTD.style.fontWeight = "bold";
    		            }
    		        }
    			}
    Ce code "scan" bien tous les TDs de ma page ... mais me répond que tous les TDs ont pour grand-parent un "TBODY" !???
    Quand on n'a pas d'tête, on a ...

  13. #13
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Dans le DOM un table à obligatoirement un tbody, même si tu ne l'a pas explicitement écrit dans le code.
    Si tu as firefox ajoute l'extension DOminspector qui te montreras la structure DOM de ta page
    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 !

  14. #14
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par ghohm
    Ce code "scan" bien tous les TDs de ma page ... mais me répond que tous les TDs ont pour grand-parent un "TBODY" !???
    sous Firefox (au moins) même si la balise TBODY n'est pas dans le code HTML elle est incluse dans la liste des noeuds (cf. l'inspecteur DOM de FF )

    [edit]Spacefrog m'a grillé [/edit]

  15. #15
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    [edit]Spacefrog m'a grillé [/edit]
    pour changer
    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 !

  16. #16
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Faut pas croire que j'allais me laisser faire comme ça !

    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
    function modifStyle() {
            var i, oTD;
            var allTDs = document.getElementsByTagName("td");
            var n = allTDs.length;
     
    	       for (i=0 ; i<n ; i++)
    	       {
    	           oTD = allTDs[i];
     
    	           var tagPere = oTD.parentNode;
     
    	           if (oTD.className == "txt" && (tagPere.className.toLowerCase() == "even" || tagPere.className.toLowerCase() == "odd"))
    	            {
                	switch (oTD.innerHTML)
    				{
    					case "2":
    					  tagPere.style.color = "navy";
    					  tagPere.style.fontWeight = "bold";
    					  break;
    					case "3":
    					  tagPere.style.color = "purple";
    					  tagPere.style.fontWeight = "bold";
    					  break;
    					case "4":
    					  tagPere.style.color = "#E72100";
    					  tagPere.style.fontWeight = "bold";
    					  break;
    					case "5":
    					  tagPere.style.color = "#ED7F10";
    					  tagPere.style.fontWeight = "bold";
    					  break;
    					case "6":
    					  tagPere.style.color = "#FCD21C";
    					  tagPere.style.fontWeight = "bold";
    					  break;
    					case "7":
    					  tagPere.style.color = "#008B00";
    					  tagPere.style.fontWeight = "bold";
    					  break;
    					default:
    					  tagPere.style.color = "black";
    					  tagPere.style.fontWeight = "bold";
    				}
            	    }
    	        }
    	}
    </script>
    Au final : je change le style de l'élément parent du TD ayant pour class "txt" et pour élément parent, un élément ayant un class "even" ou "odd" !


    Gôm 1 - DOM 0 !


    Merci à vous !
    Quand on n'a pas d'tête, on a ...

  17. #17
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (oTD.className == "txt" && tagGdPere.nodeName == "TBODY")


    euh... quand on y pense, le parent d'un td est un tr et le grand parent est un tbody. Alors à quoi sert le test sur le grand parent ?

    Egalité...

  18. #18
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Citation Envoyé par Auteur
    Egalité...



    Ca s'payera !
    Quand on n'a pas d'tête, on a ...

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

Discussions similaires

  1. [DOM] Modification du HTML via une fonction JS ?
    Par ghohm dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/11/2007, 16h22
  2. [DOM] Modification d'un style CSS (Déclaration attendue, mais ..)
    Par d-Rek dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/10/2007, 16h48
  3. Recalculer une feuille Excel après une modif de style
    Par ThierryAIM dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/03/2007, 20h55
  4. [DOM] modification d'un XML ?
    Par ghohm dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 13/07/2006, 15h31
  5. [CSS] Créer un style en fonction du div parent
    Par titoumimi dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 28/02/2006, 09h33

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