2014-09-29 37 views
2

我有一個無序的列表,我正在使用下面的代碼將類添加到我訪問的當前鏈接。如何在裏面添加類?

$("li a").filter(function(){ 
    return this.href == location.href.replace(/#.*/, ""); }).addClass("selected"); 

的結果是:<li><a href="#" class="selected">Link1</a></li>

但我需要的解決方案是:<li class="selected"><a href="#">Link1</a></li>

請幫助。謝謝。

更新:大多數當前的答案正常工作。但是,我遇到了另一個問題。

父李有子菜單。點擊子菜單鏈接後,父li的「selected」類就消失了。有沒有辦法讓「選定」班繼續留在家長李?或者,如果可以僅在父li上添加該類,而不是在任何點擊的子菜單鏈接上添加該類?再次感謝您的幫助。 :)

回答

1

我認爲這應該這樣做

$("li a").filter(function(){ 
return this.href == location.href.replace(/#.*/, ""); }).parent('li').addClass("selected"); 

編輯

$("li a").filter(function(){ return this.href == location.href.replace(/#.*/, ""); }).parents('li, li:first').addClass("selected"); 
+0

感謝爵士,這一個作品以及:) – user3892090 2014-09-29 06:58:53

+0

歡迎您高興地幫助 – 2014-09-29 07:33:33

+0

嗨,先生,我發佈了一個更新問題。希望你能幫助我再次:) – user3892090 2014-09-29 07:56:37

2

要篩選的錨元素,而不是li所以addClass()將類添加到a元素。您可以使用祖先查詢(.parent(),.closest())來找到所需li元素,然後用addClass()

$("li a").filter(function() { 
    return this.href == location.href.replace(/#.*/, ""); 
}).parent().addClass("selected"); 
+1

你不能說它是「a」的直接父母,直到你不知道HTML結構 – 2014-09-29 06:52:37

+0

@TusharRaj Op已經給出了html結構 – 2014-09-29 06:53:49

+0

是啊..upvoted! – 2014-09-29 06:54:53

0

清潔和最優化的方式:

var targetUrl = window.location.href.replace(/#.*/, ""); 
var activeNav = $('li a[href="'+ targetUrl +'"]'); 
if (activeNav.length) { 
    activeNav.parent('li').addClass('selected'); 
} 
+0

感謝您的回覆先生,但沒有達到我想要的結果。 – user3892090 2014-09-29 07:05:00

1
$("li a").filter(function(){ 
     return this.href == location.href.replace(/#.*/, ""); }).closest('li').addClass("selected"); 
+0

感謝Sir的回覆。有用 :) – user3892090 2014-09-29 07:03:16