2011-04-26 33 views
1

另一個頭刮擦器,這個!爲什麼除了ONE addClass()行之外,下面的所有內容都可以工作?each()和hasClass中的addClass在某種程度上不起作用

var arr = ['1000','1001','1002','1003','1004','1005'], 
    allarr = 0; 

$.each(arr, function(i, value) { 
    $('#parent ul.list1 li a, #parent ul.list2 li a').each(function() { 
     if($(this).hasClass('n-'+value)) { 
     console.log('yes for: '+$(this).html()); //WORKS: it lists 6x "Something" 
     allarr++; //WORKS: in the end, it says "6" 
     $(this).addClass('active'); //DOES NOT WORK. 

     } else { 
     $(this).removeClass('active'); 
     } 
    }); 
}); 
console.log('allarr: '+allarr); 

HTML:

<ul class="list1"> 
    <li><a class="n-1000">Something</a></li> 
    <li><a class="n-1001">Something</a></li> 
    <li><a class="n-1003">Something</a></li> 
    <li><a class="n-1005">Something</a></li> 
</ul> 
<ul class="list2"> 
    <li><a class="n-1002">Something</a></li> 
    <li><a class="n-1004">Something</a></li> 
    <li><a class="n-1006 active">Something that should have the active class REMOVED</a></li> 
</ul> 

奇怪,不是嗎?和幫助將不勝感激。謝謝!

更新:我剛剛用$(this).addClass('active areyoukidding');替換了$(this).addClass('active'); - 猜猜看,第二個類沒有問題。 active仍然被忽略。有沒有人曾經遇到過這個?在應用程序中沒有其他地方可以稍後重寫;我已經在腳本的許多其他地方添加了0​​類。

回答

4

你經過的每一個元素六次......

  • 對於元素1000,加active,從一切刪除active循環。
  • 對於元素1001,加active,從一切刪除active(上述撤銷)
  • ...

因爲元素1005是運行這個邏輯,只有它將會留下active最後一個

+0

那麼,你是絕對正確的。當然。我在第一個循環之前移動了else子句,現在它完美運行。有時你只需要第二雙眼睛:)謝謝! – bobsoap 2011-04-26 00:55:42