Это рабочий пример того, как я бы это сделал: http://jsbin.com/ogika
CSS:
.month.hide { display: none; }
HTML
<p><a href="#" class="month-next">Next Month</a></p>
<table class="month"><tr><td>a</td></tr></table>
<table class="month hide"><tr><td>b</td></tr></table>
<table class="month hide"><tr><td>c</td></tr></table>
<table class="month hide"><tr><td>d</td></tr></table>
JavaScript:
$(function () {
$(".month-next").click(function () {
var months = $(".month"), numMonths = months.length, curr = 0;
return function () {
//Hide the current table, by adding the 'hide' class
months.eq(curr).addClass("hide");
//Get the index of next table in the list
curr = (curr + 1) % numMonths;
//Show the next table, by removing the 'hide' class
months.eq(curr).removeClass("hide");
}
}());
});
В приведенном выше коде months
- это список таблиц ... который в данном случае содержит 4 элемента; и numMonths
- количество элементов ... т.е. 4.
«Волшебство» приведенного выше кода - это строка: curr = (curr + 1) % numMonths;
Эта строка получает индекс следующего элемента, который будет отображаться, и работает по кругу.
Давайте рассмотрим пример:
0 1 2 3
=========================
| a | b | c | d |
=========================
Теперь, скажем, curr
равно 0:
0 1 2 3
=========================
| a | b | c | d |
=========================
^
//curr is currently 0
curr = (curr + 1) % numMonths; //(0 + 1) % 4
//now, curr is 1
0 1 2 3
=========================
| a | b | c | d |
=========================
^
После выполнения этой строки кода curr
становится 1: (0 + 1)% 4 = 1. Это означает, что следующий индекс отображаемого элемента равен 1. Следовательно, мы получаем следующий элемент и показать это, удалив класс hide
: months.eq(curr).removeClass("hide");
Теперь давайте посмотрим на пример, где curr
- последний элемент: 3
0 1 2 3
=========================
| a | b | c | d |
=========================
^
//curr is currently 3
curr = (curr + 1) % numMonths; //(3 + 1) % 4
//now, curr is 0
0 1 2 3
=========================
| a | b | c | d |
=========================
^
Как видите, curr
теперь равно 0 ... и, таким образом, цикл продолжается.