var messages = [
'First click appends text "Message 1"',
'Second click appends text "Message 2"',
'Third click appends text "Message 3"'
];
var i = -1;
var target = $("#target");
$("#selector").click(function(){
target.append(messages[i = ++i % messages.length]);
});
Это на самом деле «добавит» их. Если вы хотите заменить каждое сообщение каждый раз, вы бы использовали .text()
вместо .append()
.
ДЕМО (с использованием .text()
): http://jsfiddle.net/thVK6/
Переменная i
будет увеличиваться с каждым кликом. Когда i
равно messages.length
, оно будет сброшено на 0
.
Таким образом, при каждом щелчке i
используется для получения нового сообщения из массива.
Чтобы дополнительно объяснить трюк приращения, оператор %
по модулю возвращает остаток при делении i
на messages.length
.
Когда i
равно messages.length
, остаток равен 0
, поэтому мы возвращаемся к началу.
var i = -1;
Первый щелчок:
++i; // 0
i = i % messages.length; // 0
messages[ i ]; // first message (index 0)
Второй клик:
++i; // 1
i = i % messages.length; // 1
messages[ i ]; // second message (index 1)
Третий щелчок:
++i; // 2
i = i % messages.length; // 2
messages[ i ]; // third message (index 2)
Четвертый клик:
++i; // 3
i = i % messages.length; // 0, because 3 % 3 === 0
messages[ i ]; // first message (index 0)
... и так i
теперь снова 0
, поэтому он начинается заново.
Так что тот же трюк приращения, но изложенный выше, будет ...
$("#selector").click(function(){
++i;
i = i % messages.length;
target.append(messages[ i ]);
});
http://jsfiddle.net/thVK6/4/