2012-06-15 3 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'); 

     }); 
    }); 

}); 

});

Я вижу, что я делаю это неправильно, поэтому я хочу спросить вас, как красиво синхронизировать его таким образом, что, когда я нажимаю «изменить», мой «сейчас» становится «предыдущим», «следующим», становится «сейчас», а «предыдущий» становится следующим?

+0

возможно .toggleClass JQuery (в) помогает? – 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. Кроме того, в более общем случае вы рискуете удалить другие классы, если у них были элементы, поэтому класс add/remove обычно лучше, чем устанавливать атрибут напрямую. Не проблема с данным HTML, а что-то иметь в виду. – Chris