2010-12-14 51 views
2

J'ai une question. J'utilise le menu jquery superfish avec la structure suivanteLiens actifs jquery superfish

<div id="menu" class="ge-navigation-item"> 
    <!-- navigation --> 
    <ul id="test" class="sf-menu sf-vertical sf-js-enabled sf-shadow"> 
     <li><a href="index.html">Home</a></li> 
     <li><a href="#">About</a> 
     <ul> 
      <li><a href="index.html">Index</a></li> 
      <li><a href="#">Page</a> 
          <ul> 
           <li><a href="#">menu item</a></li> 
           <li><a href="#">menu item</a></li> 
           <li><a href="proef.html">menu item</a></li> 
           <li><a href="index.html">index</a></li> 
           <li><a href="#">menu item</a></li> 
          </ul> 
      </li> 
      <li><a href="page-fullwidth.php">Page - Full Width</a></li> 
     </ul> 
     </li> 
     <li><a href="showcase.php">Showcase</a></li> 
    </ul> 
    <!-- /navigation --> 
    </div> 

ce que je veux est que cliquer sur un lien de la structure de menu sera visible

donc cliquer sur index.html établira un lien sur tous les liens avec href index.html mais en cliquant sur proef.html établira une classe active sur href proef.html - page - a propos

jusqu'à présent, j'ai essayé mais avec de mauvais résultats

var path = window.location.toString().split("/") 
path = path[path.length - 1] 
//alert (path); 
if (path) 
$("#test a[href='" + path + "']").addClass("actief"); 
$("#test ul li:has(a) a[href='" + path + 
    "']").parent().parent().parent().addClass("actief"); 

Répondre

2

Bienvenue sur stackoverflow. Essayez ceci:

var path = window.location.pathname.split('/'); 
path = path[path.length-1]; 

if (path !== undefined) { 
    $("#menu3").find("a[href='" + path + "']").addClass("actief"); 

} 

Cela devrait appply la classe à tout lien qui correspond au dernier élément de l'URL actuelle. Si vous cherchiez un comportement différent, veuillez élaborer!

MISE À JOUR
En fait, il semble que vous avez besoin ceci:

var path = window.location.pathname.split('/'); 
path = path[path.length-1]; 

if (path !== undefined) { 
    $("#menu3") 
     .find("a[href$='" + path + "']") // gets all links that match the href 
     .parents('li') // gets all list items that are ancestors of the link 
     .children('a') // walks down one level from all selected li's 
     .addClass('actief'); 
} 

Cela mettra la classe sur chaque élément a la chaîne.

+0

Cela fonctionne, mais seulement pour le lien actif. En cliquant sur proef.html devrait également définir une classe active sur - Page - About Thanks – ceasar

+0

Yup :-) Cela fonctionne comme un charme. Merci d'avoir aidé – ceasar

+0

Je viens de faire mieux. Vous devriez mettre à jour votre script avec ma version mise à jour. Je ne sais pas pourquoi je l'ai fait comme je l'ai fait la première fois. – Stephen

1

nous avons fait quelque chose comme:

$("#sample-menu-1").find("a[href='"+window.location.pathname+"']").each(function() { 
$(this).parents('li').addClass("current"); 
$(this).closest('ul').css("visibility","visible").css("display","block"); 
}); 

Il semble fonctionner mais dans le menu mousing, le menu ne tient pas la position actuelle.

=== === mise à jour

Il semble que la mère ul est remis à zéro pour ne pas afficher après la souris sur le menu

+0

En fait cette solution est la meilleure. La réponse choisie a un problème avec le menu imbriqué. Merci! – user2519032