J’essaie d’utiliser un script que j’utilise sur un autre site pour que mon menu de navigation s’anime correctement.
Voici le script:
jQuery(window).load(function() { $("#menu > div > ul > li > a").click(function (e) { // binding onclick if ($(this).parent().hasClass('selected')) { $("#menu .selected ul").slideUp(100); // hiding popups $("#menu .selected").removeClass("selected"); } else { $("#menu .selected ul").slideUp(100); // hiding popups $("#menu .selected").removeClass("selected"); if ($(this).next(".sub-menu").length) { $(this).parent().addClass("selected"); // display popup $(this).next(".sub-menu").children().slideDown(200); } } e.stopPropagation(); }); $("html").click(function () { // binding onclick to body $("#menu .selected ul").slideUp(100); // hiding popups $("#menu .selected").removeClass("selected"); }); });
Le code HTML avec lequel je travaille est différent de celui de l’autre site sur lequel je travaille, car j’essaie d’utiliser la sortie wp_nav_menu()
par défaut de wp_nav_menu()
pour le faire fonctionner. C’est une structure différente et je ne peux pas comprendre les ajustements à effectuer pour que cela fonctionne correctement.
Sortie de wp_nav_menu:
EDIT: Ajouter les styles de menu actuels:
#menu { float: right; position: relative; top: 25px; } #menu > div > ul > li { display: inline-block; text-align: center; padding: 0 1em; } #menu > div > ul > li.menu-item-has-children a:after { content: " \f107"; font-family: FontAwesome; } #menu li a { color: #fff; text-decoration: none; font-weight: bold; } #menu li a:hover { color: #F73987;; } #menu > div > ul > li > ul { display: none; } #menu > div > ul > li > ul.selected { display: inline; }
Dans votre script, $(this).parent()
fait en fait référence à l’élément li
avant le lien.
Prenez le balisage suivant par exemple
Avec
$("#menu > div > ul > li > a")
En gros, vous sélectionnez Programming
, donc
$(this).parent().addClass("selected");
ajoute la classe selected
à l’élément li
, pas l’élément ul
qui se trouve être
juste en dessous de Programming
dans votre Programming
. Vous devriez append la classe selected
aux enfants qui ne sont pas parents.
Essayez de changer le script comme suit
$("#menu > div > ul > li > a").click(function (e) { // binding onclick if ($(this).next(".sub-menu").hasClass('selected')) { $("#menu .selected ul").slideUp(100); // hiding popups $("#menu .selected").removeClass("selected"); } else { $("#menu .selected ul").slideUp(100); // hiding popups $("#menu .selected").removeClass("selected"); if ($(this).next(".sub-menu").length) { $(this).next(".sub-menu").addClass("selected"); // display popup $(this).next(".sub-menu").children().slideDown(200); } } e.stopPropagation(); });
MODIFIER
Vous ne savez pas comment fonctionne le menu d’origine, mais cela pourrait être une solution basée sur vos définitions CSS.