我有一個標準的基於ul的CSS導航菜單。我試圖使用JQuery來切換活動菜單的CSS類名稱。但是,我遇到兩個問題:使用Jquery切換css類
- window.location.href永遠不會等於我的任何錨定hrefs。我切換到路徑名,但他們仍然不匹配。即使在調試器中,它們似乎也是如此。
- 我似乎無法從它的anchor.prev獲取li。我需要改變李的類名。
這裏的HTML:
<div id="left-content">
<ul>
<li class="separator">Main
<ul>
<li class="active link"><a href="/main1" onclick="toggle_active_menu();">Main 1</a></li>
<li class="link"><a href="/main2" onclick="toggle_active_menu();">Main 2</a></li>
<li class="link"><a href="/main3" onclick="toggle_active_menu();">Main 3</a></li>
</ul>
</li>
<li class="separator">Tools
<ul>
<li class="link"><a href="/tools1" onclick="toggle_active_menu();">Tools 1</a></li>
</ul>
</li>
</ul>
</div>
當點擊一個錨,它的相應的李應具備「主動聯繫」作爲類名。而其他所有的li應該重置爲「鏈接」作爲類名稱。
這裏是Jquery的的javascript:
function toggle_active_menu() {
$('#left-content a').each(function() {
/*var isActive = $(this).attr('href') == window.location.href;*/
var active = this.pathname == window.location.pathname;
var prev = this.prev();
alert("active: " + active + "\nthis.pathname: " + this.pathname + "\nwindow.location.pathname: " + window.location.pathname + "\nprev: " + prev);
prev.toggleClass('active', active);
});
}
我把警報在那裏幫助調試。正如我所提到的,點擊錨點的href(或路徑名)永遠不會匹配窗口的位置href(或路徑名)。 prev總是未定義的,而不是錨的李。
回答 - 最終
測試不同的答案後,我富爾德,我不得不刪除的onclick調用和調用文檔準備功能toggle_active_menu函數。在調用onclick之前,窗口位置未被更新。另外,我沒有使用toggleClass,所以我可以保留類名的順序。
function toggle_active_menu() {
$('#left-content ul li ul li a').each(function() {
var pathname = window.location.pathname == '/' ? '/main1' : window.location.pathname;
var active = pathname.indexOf(this.pathname) != -1;
if (active) {
$(this).parent().attr('class', 'active link');
} else {
$(this).parent().attr('class', 'link');
}
});
}