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()
.
DEMO (с использованием .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/
Не могли бы вы объяснить этот синтаксис немного больше? сообщения [i = ++ i% messages.length] ... Я незнакомый. Благодаря! –
@ j-man86: Да, уже обновлено. Я еще раз расскажу об этом подробнее. –
'messages [i = ++ i% messages.length]' - Я думаю, что это плохая идея. Код не должен вводить в заблуждение. Вы не хотите возвращаться к этому коду через несколько недель и задаетесь вопросом, что вы там делали. Вместо этого я рекомендую несколько операторов. –