2012-06-15 4 views
0

나는 다음과 같은 테이블이 있습니다JQuery와 addClass()와 removeClass() 동기화

<table> 
<tr class="change"><td>Click to change</td></tr> 

<tbody id="p1" class="now"> 
<tr>...</tr> 
<tr>...</tr> 
<tr>...</tr> 
<tr>...</tr> 
</tbody> 
<tbody id="p2" class="next"> 
<tr>...</tr> 
<tr>...</tr> 
<tr>...</tr> 
<tr>...</tr> 
</tbody> 
<tbody id="p3" class="previous"> 
<tr>...</tr> 
<tr>...</tr> 
<tr>...</tr> 
<tr>...</tr> 
</tbody> 
</table> 

내가 "지금"클래스 TBODY을 숨기고 클래스와 하나를 표시 할을 "다음"때 난을 클릭합니다 행을 변경하십시오.

내 JQuery와는 (만 지금 다음 계산) :

$(document).ready(function(){ 

$('.change').click(function(){ 

    $('.now').hide('slow', function(){ 
     $('.next').show('slow', function(){  


     $('#p1').removeClass('recent'); 
     $('#p2').removeClass('next'); 

     $('#p1').addClass('next'); 
     $('#p2').addClass('recent'); 

     }); 
    }); 

}); 

});

내가 잘못하고있는 것을 본다. 그래서 나는 "변화"를 클릭 할 때 내 "지금"tbody가 "이전", "다음"이되는 방식으로 그것을 훌륭하게 동기화하는 방법을 묻고 싶다. "지금"이되고 "이전"이 다음이됩니까?

+0

아마도 jQuery의 .toggleClass 시도() 도움이? – 11684

답변

1
$('.change').click(function(){ 
    var now = $('.now'); 
    var next = $('.next'); 
    var previous = $('.previous'); 
    now.hide('slow', function(){ 
     next.show('slow'); 
     previous.removeClass('previous').addClass('next');    
     now.removeClass('now').addClass('previous'); 
     next.removeClass('next').addClass('now'); 
    }); 
});​ 

DEMO

3

$(document).ready(function() { 
    $('.change').click(function() { 
     $('.now').hide('slow', function() { 
      $('.next').show('slow', function() { 
       $prev = $('.previous'); 
       $now = $('.now'); 
       $next = $('.next'); 
       $prev.removeClass('previous').addClass('next');    
       $now.removeClass('now').addClass('previous'); 
       $next.removeClass('next').addClass('now'); 

      }); 
     }); 
    }); 
}); 
+3

방금 ​​추가 한 '이전'클래스가 제거됩니다. 세 개의 모든 선택자의 결과를 저장하도록 변경 한 다음 해당 배열에서 'removeClass'를 수행하십시오. – Codesleuth

+0

@Codesleuth, 고마워, 나는 그것을 간과했다. :) –

-1
$('.change').click(function() { 
    $('.now').attr('class', 'previous'); 
    $('.next').attr('class', 'now'); 
    $('.previous').attr('class', 'next'); 
}); 
+0

원하는대로 표시 및 숨기기 효과를 적용 할 수 있습니다. – Ananth

+0

'.now'는'.previous'가되고, 그 다음에'.next'가됩니까? 나는 이것이 질문자가 염두에두고있는 것이라고 생각하지 않는다 ... –

+0

이것은 Codesleuth에 의해 논평 된 Joy의 대답과 같은 문제를 가지고있다. 또한 더 일반적인 경우에는 요소에 직접 클래스를 추가/제거하는 것이 일반적으로 특성을 설정하는 것보다 낫기 때문에 다른 클래스를 제거 할 위험이 있습니다. HTML에 대한 문제는 아니지만 염두에 두어야 할 사항입니다. – Chris