2014-01-10 58 views
1

我試圖通過添加一個CSS類(「clickedNav」類)來創建一個導航欄,其中您正在訪問的當前選項卡具有不同的背景顏色。我有一個循環遍歷並移除顏色(所以只有當前選項卡突出顯示),然後將顏色添加到單擊的鏈接。 現在,它正在成功添加類(clickedNav),但我的循環事先刪除它們並沒有刪除它們(我看到很多「HEYS」,但沒有「yup」)。以下是相關代碼:jQuery:遍歷CSS元素的每個元素

$('.navlink').click(function(e){ 
    console.log("HEY"); 
    var self = $(this); 

    $('.navlink').each(function(i) { 
     if($('.navlink').hasClass('.clickedNav')){ 
      console.log("yup"); 
      $('.navlink').removeClass('clickedNav'); 
     } 
    }); 

    $(this).addClass('clickedNav'); 
    event.stopPropagation(); 
}); 

我在做什麼錯?

編輯:謝謝你的幫助。請參閱scrblndr3針對我發佈的代碼修復的響應,以及Pinpickle對更高效的解決方案的響應。

回答

4

無需爲。每個功能,只需使用選擇你的優勢(並採取"."removeClass作爲scrblnrd3說)

$('.navlink.clickedNav').removeClass('clickedNav'); 

這種方式,功能只會對那些具有類(雖然你可以只使用'.navlink'作爲選擇元素進行它會做同樣的事情)

3

你有幾個問題。首先,在你的hasClass,你正在把你的課堂放在他們面前。這是不必要的。其次,你已經定義你的事件有e,但你使用它作爲event。第三,你應該使用$(this).each()

這應該可以解決這個問題

$('.navlink').click(function(e){ 
    console.log("HEY"); 
    var self = $(this); 

    $('.navlink').each(function(i) { 
     if($(this).hasClass('clickedNav')){ //No need for a period 
      console.log("yup"); 
      $(this).removeClass('clickedNav'); 
     } 
    }); 

    $(this).addClass('clickedNav'); 
    e.stopPropagation(); 
}); 
+0

這仍然無法正常工作。在'.each()'循環中,在測試類時仍然引用整個'$('。navlink')'集合,您需要在循環內使用'$(this)'來測試當前項目。 –

+0

@winterblood whoopsies – scrblnrd3

+0

感謝scrblnrd3提供快速和翔實的響應!我改變了代碼,現在它工作的很好。 – Ber