J'ai fait un script pour mettre un div en "display: none" sous la condition : pas de <a> à l'intérieur d'un div subordonné. Je précise d'entrée que j'étais obligé de garder la structure du code html sur lequel porte le script :
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 <h1 id="sortie">SORTIE STANDARD JS : </h1> <div class="itemAttachPage"> <div class="itemAttachInterPage"> <a class="itemLnkAttachInterPage" href="#">Ceci est un lien interne</a> </div> <div class="itemAttachExterPage"> <a class="itemLnkAttachExterPage" href="http://www.apple.com" target="InfoelsaNetOutView">Ceci est un lien vers un super site</a> </div> <div class="itemAttachFilePage"> <a class="itemLnkAttachFilePage" href="#">Ceci est un PDF de test</a> </div> </div> <div class="itemAttachPage" style="border: solid 1px;"> <div class="itemAttachInterPage"> </div> <div class="itemAttachExterPage"> </div> <div class="itemAttachFilePage"> </div> </div>
Le script:
Alors, le problème c'est que ça fonctionne sous firefox mais pas sous ... IE biensur
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 function supr() { var divs = document.getElementsByTagName('div'); // TABLEAU DIV for(var i=0; i<divs.length; i++) // BOUCLE DIV { var classDiv = divs[i].className; // CLASSE DIV if(classDiv == 'itemAttachPage') // TEST CLASSE DIV { var enfants = divs[i].childNodes; // TABLEAU ENFANTS var presence = 0; for(var u=0; u<enfants.length; u++) // BOUCLE ENFANTS { var classEnfant = enfants[u].className; // CLASSE ENFANT if(classEnfant == 'itemAttachInterPage' || classEnfant == 'itemAttachExterPage' || classEnfant == 'itemAttachFilePage')// TEST CLASSE ENFANT { var enfants2 = enfants[u].childNodes; for(var x=0; x<enfants2.length; x++) { var classEnfant2 = enfants2[x].className; var nomNoeudEnfant2 = enfants2[x].nodeName; document.getElementById("sortie").firstChild.appendData(" | "+nomNoeudEnfant2); if( nomNoeudEnfant2 == "A") presence = 1; } if(presence == 0) { var visu = document.createAttribute("style"); //On crée un noeud attribut de nom "style" visu.nodeValue = "display: none"; //On lui affecte la valeur "display: none" divs[i].setAttributeNode(visu); //On l'ajoute au noeuds attributs du div } } } } } }
up: J'ai testé sous mac/safari ça fonctionne aussi.
voila un exemple de ce que renvoi la sortie standard sous firefox ou safari : SORTIE STANDARD JS : | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | A | #text | #text | #text | #text
Et là ce qui sort sous IE6 et 7 avec le même fichier : SORTIE STANDARD JS : | A | #text | A | #text | A | #text | A | #text | A | #text | A | #text | A | #text | A | #text | A | #text | A | #text | A | #text | A | #text
A+
Partager