2011-04-26 5 views
1

또 다른 머리 scratcher,이 하나! ONE addClass() 행을 제외하고 아래의 모든 항목이 작동하는 이유는 무엇입니까?each() 내의 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');$(this).addClass('active areyoukidding');으로 바 꾸었습니다. 그 두 번째 클래스가 문제없이 추가되면 어떻게 되나요? active은 여전히 ​​무시됩니다. 누구도 이전에 이것을 보았습니까? 이 앱이 나중에 덮어 쓸 수있는 앱은 없습니다. 이미 스크립트의 다른 많은 장소에 active 클래스를 추가하고 있습니다.

답변

4

당신은 모든 요소를 ​​통해 여섯 번 ... 요소 1000를 들어

  • , active 추가 할 다른 모든 것들에서 active을 제거를 반복하고 있습니다. 요소 1001, active을 추가 할 다른 모든 것들에서 active 제거에 대한
  • 는 요소 1005 이후
  • ...

는 논리 만이 active 남아있을 것이라는 점을 실행하는 마지막입니다 (위의 실행 취소)

+0

글쎄, 당신은 틀림 없습니다. 당연하지. 첫 번째 루프 전에 else 절을 ​​이동 했으므로 이제는 완벽하게 작동합니다. 때로는 두 번째 눈 쌍이 필요합니다 :) 감사합니다! – bobsoap

관련 문제