[php/javascript] Menu avec arborescence

Bonjour,

je cherche à créer un petit menu en javascript, du type:

[+] sous-menu1
- lien 1
- lien 2
[+] sous-menu2
- lien 3
- lien 4
etc.

J’ai googlé et trouvé quelques codes que j’ai adapté pour mon site, mais le résultat me laisse un peu perplexe. J’ai l’impression que quand on clique sur un [+], il se passe trop de choses: c’est peut-être mon navigateur ou autre, mais on dirait que les liens apparaissent/disparaissent/réapparaissent …

D’autre part, et c’est encore une fois peut-être dû à mon navigateur, le curseur qui s’affiche quand on survole un [+] c’est une “barre d’édition”, or je voudrais une petite main type “action” .

Enfin, je n’arrive pas à faire en sorte que mon menu soit réduit à l’affichage de la page, et qu’on doive dérouler les éléments si nécessaire seulement. Je vois bien les fonctions qui s’en occupe, mais quand je les modifie je n’obtiens pas l’effet escompté.

Voilà donc mon code:
dans la page.php

[code]

ma_fonction();[/code]

et dans mon page.inc

[code]

<?php ma_fonction() { print "
  • [+]sous-menu 1
  • [+]sous-menu 2 "; } ?>[/code]

    Je vous précise que je suis débutant en webdev, je dois juste faire quelque chose de fonctionnel, que ça soit propre ou pas à la limite B)
    Et mes questions sont peut-être stupides, il s’agit sans-doute de choses évidentes, aussi pardonnez ma noobitude svp ^^

j’ai pas essayé, il y a donc peut-etre d’autres chose, mais déjà un probleme saute aux yeux.
d’abord, l’url qui va bien: http://www.w3schools.com/css/pr_class_display.asp

la propriété display peut prendre énormément de valeurs, suivant l’élément que l’on affiche.
lorsque tu affiches un élément de sous-menu, tu initialise cette propriété à ‘block’, ligne 12 de ton code:
node.style.display = ‘block’;

or, ‘block’ n’est adaptée que pour des éléments comme des , pas pour des

  • qui sont des éléments de liste.
    en théorie, le mieux serait donc de remplacer cette ligne par ceci:
    node.style.display = ‘list-item’;

    le probleme, c’est qu’internet explorer a franchement du mal avec les différentes valeurs de la propriété display, et préfère largement qu’on mette du block partout.

    une solution assez simple est d’initialiser une variable en début de script en fonction du navigateur, avec quelque chose de ce genre:
    if(navigator.appName == “Microsoft Internet Explorer”)
    var displayli = ‘block’;
    else
    var displayli = ‘list-item’;

    puis d’utiliser cette variable dans ta fonction d’affichage du menu:
    node.style.display = displayli;

  • Sinon pour faire des arbres en javascript le plus simple c’est quand même destroydrop. Choppé, déployé, approuvé.