2010-12-14 4 views
2

Ich habe eine Frage. Ich benutze jQuery Superfish Menü mit folgender StrukturAktive Links 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> 

, was ich will, ist, dass die Menüstruktur auf einen Link zu klicken, sichtbar sein wird

So werden Sie auf index.html einen Link auf alle Links gesetzt mit aber href index.html auf proef.html klicken, wird eine aktive Klasse auf href proef.html gesetzt - Seite - über

Bisher habe ich versucht, dies aber mit schlechten Ergebnissen

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"); 

Antwort

2

Willkommen bei stackoverflow. Versuchen Sie folgendes:

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

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

} 

, dass die Klasse zu jedem Link appply sollte, dass das letzte Element der aktuellen URL entspricht. Wenn Sie nach einem anderen Verhalten suchen, bitte erarbeiten!

UPDATE
Eigentlich sieht es aus wie Sie diese benötigen:

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'); 
} 

, dass die Klasse auf jedem a Element auf die Kette gelegt werden.

+0

Dies funktioniert aber nur für den aktiven Link. Klicken Sie auf proef.html sollte auch eine aktive Klasse auf - Page - Über Thanks – ceasar

+0

Yup :-) Das funktioniert wie ein Charme. Danke, dass du mir geholfen hast. – ceasar

+0

Ich habe es einfach viel besser gemacht. Sie sollten Ihr Skript mit meiner aktualisierten Version aktualisieren. Ich weiß nicht, warum ich das so gemacht habe, wie ich es das erste Mal gemacht habe. – Stephen

1

wir haben so etwas wie:

$("#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"); 
}); 

Es scheint zu funktionieren, aber über das Menü auf mousing, wird das Menü nicht die aktuelle Position halten.

=== Update ===

Es scheint, die Eltern ul zurückgesetzt wird nicht über das Menü nach mousing anzuzeigen

+0

Eigentlich ist diese Lösung die beste. Die gewählte Antwort hat Probleme mit verschachtelten Menüs. Vielen Dank! – user2519032