2014-10-20 52 views
0

我對以下邏輯無法按預期工作的原因感到茫然。我想在點擊時刪除任何活動類,然後將該類添加回僅與li相對應的href。基於url的JQuery活動類沒有按預期工作

var str=location.href.toLowerCase(); 
    $(".navlinks li a").each(function() { 
    if (str.indexOf(this.href.toLowerCase()) > -1) { 
    $("li.active").removeClass("active"); 
    $(this).parent().addClass("active"); 
    } 
}); 

<ul class="navlinks"> 
     <i class="fa fa-bars"></i> 
     <li><a href="/give">Give</a></li> 
     <li><a href="/contact">Contact</a></li> 
     <li><a href="/volunteer">Volunteer</a></li> 
     <li><a href="/events">Calendar</a></li> 
     <li><a href="/services">Services</a></li> 
     <li><a href="/about">About</a></li> 
     <li><a href="/">Home</a></li> 
    </ul> 

目前一個空白類正在被附加到每個點擊。

+0

好像問題是與removeClass。 addclass可以正常工作,並將該行註釋掉。由於某種原因,看起來remove類在addClass之後被調用。 – byrdr 2014-10-20 18:41:13

回答

0

只是把這個裏面的if語句:

$("li.active").removeAttribute("class"); 
$(this).parent().addClass("active"); 

對我來說,它的工作原理。

編輯:把這個之外:

Var isexecutedonce = false; 

和foreach循環寫入內部:

If(!isexecutedonce){ 
    $("li.active").removeAttribute("class"); 
    Isexecutedonce = true; 
    } 

此外,如果:

 $(this).parent().addClass("active"); 
+0

由於某些原因,它不起作用。而不是李元素接收一個空課,他們根本沒有收到。這幾乎就像在addClass之後調用removeAttribute一樣。 – byrdr 2014-10-20 19:03:16

+0

我現在明白了。這是因爲for循環被一次又一次執行,這就是爲什麼它不起作用。我會更新答案。 – user3425211 2014-10-20 19:06:40