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:

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
						}					
					}					
				}					
			}
		}		
	}
Alors, le problème c'est que ça fonctionne sous firefox mais pas sous ... IE biensur

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+