J'essaie simplement de convertir un état actif en un menu HTML statique. Le menu présente la structure suivante: -Menu jQuery - État actif Basé sur l'URL
<div id="navbar">
ul id="MenuBar1" class="MenuBarHorizontal">
<li><a href="index.htm">Home</a></li>
<li><a href="about.htm">About Us</a></li>
<li><a href="products.htm">Products</a>
<ul>
<li><a href="product-grp1">Product Groups 1</a>
<ul>
<li><a href="product1.htm">Product 1</a>
<li><a href="product2.htm">Product 2</a>
<li><a href="product3.htm">Product 3</a>
</ul>
</li>
</ul>
</li>
</ul>
</div>
Vous pouvez voir que c'est un système de menu à 3 niveaux qui affiche effectivement un menu méga.
Ce que je voudrais faire est, en fonction de l'URL de la page que vous êtes sur, ajouter un état actif au menu de niveau supérieur. Cet état actif devrait indiquer si vous êtes sur une page de deuxième ou de troisième niveau. Je dois le faire en fonction de l'URL de la page plutôt que d'un simple clic car le site a beaucoup de liens directement depuis Google vers des pages spécifiques, donc je vais devoir montrer où ils se trouvent aussi.
Notez que la structure du fichier est plat de sorte que chaque URL est http://www.thesite.com/about.htm etc.
J'ai essayé de régler cette question des questions précédentes, mais ne peut pas le faire fonctionner. Je suppose que c'est à cause de la profondeur du menu, mais j'apprécierais vraiment les conseils que tout le monde peut me donner.
MERCI pour votre aide. Cela m'a vraiment mis sur la bonne voie. En fin de compte je les suivantes: -
/* The following adds active to the next level up of the url */
$('#MenuBar1 li a').each(function() {
if(filename == $(this).attr('href')) {
$(this).addClass('active');
}
});
/* The following line looks for the .active class, then the parent of it with the #navbar ul.... structure, then adds the active class to that one only */
$('.active').parents('#navbar ul.MenuBarHorizontal li').addClass('active-top');
$('#navbar ul.MenuBarHorizontal>li').addClass('menu-top');
Qu'est-ce que cela ne sert jQuery pour ajouter une classe .active le lien particulier, ajoute alors un .active-top aux parents (tous, malheureusement, comme je Je n'ai pas pu déterminer comment cibler le niveau que je voulais). La dernière ligne ajoute une classe .menu-top au niveau supérieur du menu.
Cette structure me permet de cibler uniquement le niveau supérieur du menu sans que la mise en forme ne descende du DOM vers d'autres sélecteurs enfants. Ce n'est probablement pas la solution la plus élégante, mais cela fonctionne.
Merci encore à tous ceux qui m'ont donné des conseils.
Juste utilisé cela et il a très bien fonctionné pour moi. N'oubliez pas de définir vos variables 'var url = window.location.pathname; var filename = url.substring (url.lastIndexOf ('/') + 1); ' – norsewulf