В jQuery есть два типа циклов: явный и неявный .
Явные циклы
Явные циклы - это циклы, которые вы вызываете явно.Если у вас есть массив значений, который вы хотите циклически просмотреть, вы можете использовать метод $.each()
:
$.each( [ '#a', '#b', '#c' ], function( index, value ) {
$( value ).css("color", "red");
});
jQuery будет затем циклически перебирать все значения в вашем массиве и запускать анонимную функциюпосле этого.В эту функцию он передаст два значения: текущий индекс значения, к которому он прикасается, и само значение.Так что, если мы на нашем первом прогоне, индекс будет 0, а значение будет #a.
Так что, если мы начали с:
<p id="a">A</p>
<p id="b">B</p>
<p id="c">C</p>
После запуска нашего явногоцикл, наш результат будет:
<p id="a" style="color:red">A</p>
<p id="b" style="color:red">B</p>
<p id="c" style="color:red">C</p>
Конечно, вы не ограничены массивами и другими коллекциями, созданными вручную при использовании метода $.empty()
.Вы также можете связать этот метод сразу с вашим селектором (заметьте, технически это другой $.each()
метод):
$("ul li").each(function( index ){
$(this).css("color", "red");
});
Этот метод специально предназначен для циклического перемещения по объекту jQuery.Каждая итерация представляет текущий элемент как this
в вашей анонимной функции.Итак, вернувшись к нашему более раннему примеру, мы могли бы сделать следующее:
$("#a, #b, #c").each(function( index ){
$(this).css("color", "red");
});
Таким образом, для каждого сопоставленного элемента мы выполним нашу анонимную функцию.jQuery передаст нам индекс, чтобы мы могли отслеживать наш прогресс по соответствующим элементам.При первом проходе index
будет 0, а this
будет означать #a
.Во второй раз индекс будет равен 1, а this
будет ссылаться на #b
.
. Пока явные циклы соблазняют, обратите внимание, что они могут добавить ненужные издержки вашему приложению.jQuery уже выполняет цикл самостоятельно, когда у него есть несколько совпадающих элементов.Этот цикл называется неявным циклом, и время от времени мы можем использовать его для удовлетворения наших потребностей при одновременном повышении производительности.
Неявные циклы
Неявные циклы выполняются автоматически внутриСам jQuery, например, с вашим кодом:
$("ul li").css("color", "red");
jQuery выполнил цикл по всем соответствующим элементам li
и установил их цвет "красный".Нам не нужно было специально запрашивать цикл - он просто делает это неявно.Но предположим, что «красный» был слишком прост, и мы хотели взаимодействовать с каждым элементом индивидуально - мы можем сделать это, передав функцию в качестве второго аргумента:
$("ul li").css("color", function( index, value ){
alert( "We're inside LI number " + index );
return this.innerHTML;
});
Нашей функции будет передано два аргументаby jQuery: индекс для текущего элемента и текущее значение rgb цвета для этого элемента.Вы можете использовать любой из них для внутренней логики - я просто возвращаю innerHTML
из li
.То, что мы вернем, станет новым значением для color
для этого элемента.
Так что, если наш неупорядоченный список будет выглядеть так:
<ul>
<li>Red</li>
<li>Green</li>
<li>Blue</li>
</ul>
После того, как неявный цикл jQuery завершится, первый li
будет красным, второй будет зеленым, а последний синим.
<ul>
<li style="color:Red">Red</li>
<li style="color:Green">Green</li>
<li style="color:Blue">Blue</li>
</ul>
Вы можете увидеть это онлайн на http://jsbin.com/egihun/2/edit
В зависимости от того, какой метод вы вызываетеразличные аргументы будут переданы вашей функции.Обязательно изучите документацию, чтобы узнать, какая информация доступна вам во время этих неявных циклов.