Salut,
J'ai un conflit entre deux de mes fonctions JS utilis� dans ma page HTM.
Explications :
Mon but est de faire appara�tre et dispara�tre des blocs "UL".
Pour cela, j'utilise soit ma fonction Expand qui agit sur le noeud directement.
Soit mes fonctions ExpandM et ExpandN pour tout �tendre ou tout faire dispara�tre d'un seul coup.
J'ai �galement une fonction qui change l'image sur le clic.
Le probl�me est le suivant :
Quand je replie tout via le bouton moins_all (fonction ExpandN) et que je reclique sur le bouton "plus" (fonction Expand), le block "ul id=X11" n'est plus affich� du tout.
Voil� mes fonctions JS :
Et ma page HTM
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 // Fonction qui affiche/cache un menu function expand(li) { var node = li.firstChild; var img = li.firstChild; // parcours tous les fils pour trouver l'element UL while ( node.nodeName != "UL" ) node = node.nextSibling; // parcours tous les fils pour trouver l'element IMG while ( img.nodeName != "IMG" ) img = img.nextSibling; // affiche le menu if ( node.style.display == 'none' ) { node.style.display = 'block'; img.src = 'MAN/moins.png'; img.alt = '-'; } // cache le menu else { node.style.display = 'none'; img.src = 'MAN/plus.png'; img.alt = '+'; } } function expandM(idpl) { var les_li; var les_ul = idpl.getElementsByTagName("ul"); // Récupère la liste des menus for (var i=0; i<les_ul.length; i++) { // Parcours les menus pour les afficher les_ul[i].style.display="block"; les_li = les_ul[i].getElementsByTagName("li"); // Récupère la liste des ligne du menu for (var j=0; j<les_li.length; j++) // Parcours les lignes du menu pour les afficher //les_li[j].style.display="block"; expand(les_li[j]); } } function expandN(idpl1) { var les_ul = idpl1.getElementsByTagName("ul"); // Récupère la liste des menus for (var i=0; i<les_ul.length; i++) // Parcours les menus pour les afficher les_ul[i].style.display='none'; } function ChangeImg(nom_de_l_image, chemin_de_l_image){ document.getElementById(nom_de_l_image).src = chemin_de_l_image; }
Je pense qu'une fois les ul pass�s en mode "display none" par la fonction ExpandN, ils "n'arrivent" plus � repasser en mode block.
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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"> <html> <head> <link rel="stylesheet" type="text/css" href="tree/style.css"> <script type="text/javascript" language="javascript" src="tree/function.js"></script> </head> <body background="MAN/Fond.png"> <!-- 2 lignes suivantes à paramétrer selon id +/- si présence de +/- --> <img src="MAN/plus_all.png" ALT="Permet d'ouvrir tous les "+"" class="all" width="15" height="15" onclick="ChangeImg('Y10', 'MAN/moins.png');expandM(document.getElementById('X10'));ChangeImg('Y11', 'MAN/moins.png');expandM(document.getElementById('X11'))";> <img src="MAN/moins_all.png" class="all" width="15" height="15" onclick="ChangeImg('Y10', 'MAN/plus.png');expandN(document.getElementById('X10'));ChangeImg('Y11', 'MAN/plus.png');expandN(document.getElementById('X11'))";> <ul id="X10"> <li> <img src="MAN/plus.png" onclick="expand(this.parentNode)" id="Y10"> <p>Lien 1</p> <ul class="toc" style="display:none"> <p>Lien 1-1</p> <ul id="X11"> <li> <img src="MAN/plus.png" onclick="expand(this.parentNode)" id="Y11"> <p>Lien 1-2</p> <ul class="toc" style="display:none"> <p>Lien 1-2-1</p> </ul> </li> </ul> <p>Lien 1-3</p> </ul> </li> </ul> </body> </html>
Quelqu'un a-t-il une solution ?
[EDIT]
Bon alors je pense qu'il faudrait que ma fonction ExpandN masque seulement les noeuds principaux, au lieu de parcourir tous les ul de la page...
Partager