Bonjour,
Je regarde depuis très longtemps ce site, et j'ai enfin fini par m'inscrire
Pour les menus accordéons en jQuery, je n'ai pas pris exactement les mêmes choix. Je vais donc partager ma solution
Le code html reste proche, une liste, les titres de sous-menus sont encadrés par un span, mais je n'ai pas de sous-classe pour les sous-menus :
Par contre, pour le jquery, il me semble que j'ai fait "plus" simple (bon faut dire qu'on préfère toujours son propre code). Et c'est aussi que je n'aime pas la fonction "...each()".
1) je cache les menus, et je mets des liens de débranchement à l'intérieur des span (menu 1er niveau et 2nd niveau) :
2) Quand on clique sur un premier niveau de menu, on cache, l'ensemble et on affiche le menu concerné. Si on a cliqué sur un menu déroulé, on le ferme.
3) On fait de même sur les sous-menus.
La feuille de style, je la laisse à écrire
Dans tous, les cas, je mets toujours une classe "ouvert" sur les menus que je déplie.
Bon, mon code doit aussi pouvoir être amélioré
Voila pour une technique un chouïa différente. Et merci pour tout ce que j'ai appris sur le site (et ca commence par le xhtml )
Modifié par Borak (28 Jul 2010 - 07:32)
Je regarde depuis très longtemps ce site, et j'ai enfin fini par m'inscrire
Pour les menus accordéons en jQuery, je n'ai pas pris exactement les mêmes choix. Je vais donc partager ma solution
Le code html reste proche, une liste, les titres de sous-menus sont encadrés par un span, mais je n'ai pas de sous-classe pour les sous-menus :
<ul class="menuderoul">
<li><a href="#">Menu1</a></li>
<li><span>SsMenu2</span>
<ul>
<li><a href="#">Menu1</a></li>
<li><a href="#">Menu2</a></li>
<li><a href="#">Menu3</a></li>
</ul>
</li>
<li><span>SsMenu3</span>
<ul>
<li><a href="#">Menu1</a></li>
<li><a href="#">Menu2</a></li>
<li><span>SsSsMenu3</span>
<ul>
<li><a href="#">Menu1</a></li>
<li><a href="#">Menu2</a></li>
</ul>
</li>
<li><span>SsSsMenu33</span>
<ul>
<li><a href="#">Menu1</a></li>
<li><a href="#">Menu2</a></li>
<li><a href="#">Menu3</a></li>
<li><a href="#">Menu4</a></li>
<li><a href="#">Menu5</a></li>
</ul>
</li>
<li><a href="#">Menu5</a></li>
</ul>
</li>
<li><a href="#">Menu4</a></li>
</ul>
Par contre, pour le jquery, il me semble que j'ai fait "plus" simple (bon faut dire qu'on préfère toujours son propre code). Et c'est aussi que je n'aime pas la fonction "...each()".
1) je cache les menus, et je mets des liens de débranchement à l'intérieur des span (menu 1er niveau et 2nd niveau) :
$(document).ready(function()
{ $("ul.menuderoul li ul").hide() ;
$("ul.menuderoul > li span").wrapInner('<a href="#" onclick="menuderoul(this);return false;"></a>') ;
$("ul.menuderoul ul > li span").wrapInner('<a href="#" onclick="menuderoulss(this);return false;"></a>') ;
}
)
2) Quand on clique sur un premier niveau de menu, on cache, l'ensemble et on affiche le menu concerné. Si on a cliqué sur un menu déroulé, on le ferme.
function menuderoul(id)
{ if ($(id).parent().next().is(":hidden"))
{ $("ul.menuderoul > li > ul").slideUp("normal") ;
$("ul.menuderoul > li").removeClass("ouvert") ;
$(id).parent().next().slideDown("normal") ;
$(id).parent().parent().addClass("ouvert") ;
}
else
{ $(id).parent().next().slideUp("normal") ;
$(id).parent().parent().removeClass("ouvert") ;
}
}
3) On fait de même sur les sous-menus.
function menuderoulss(id)
{ if ($(id).parent().next().is(":hidden"))
{ $("ul.menuderoul ul > li ul").slideUp("normal") ;
$("ul.menuderoul ul > li").removeClass("ouvert") ;
$(id).parent().next().slideDown("normal") ;
$(id).parent().parent().addClass("ouvert") ;
}
else
{ $(id).parent().next().slideUp("normal") ;
$(id).parent().parent().removeClass("ouvert") ;
}
}
La feuille de style, je la laisse à écrire
Dans tous, les cas, je mets toujours une classe "ouvert" sur les menus que je déplie.
Bon, mon code doit aussi pouvoir être amélioré
Voila pour une technique un chouïa différente. Et merci pour tout ce que j'ai appris sur le site (et ca commence par le xhtml )
Modifié par Borak (28 Jul 2010 - 07:32)