Работа с метода each в jQuery
Когато имаме група елементи, получени с помощта на jQuery, можем да внасяме в тях промени само за всички елементи едновременно.
Например, ако искаме да сменим текста на всички намерени параграфи - няма да можем да го направим различен.
В този случай ще ни помогне специален метод
each,
който позволява прилагането на
дадена функция към всички елементи от набор
jQuery. Вътре в тази функция ще можем да
разделим елементите и да постъпим различно
с всеки от тях.
По същество each е цикъл, с
помощта на който можем да обходим всички намерени
елементи. Връзката към този елемент, по който
в момента минава цикълът, ще се намира в this.
Можем просто да използваме този this
на чист JavaScript, както сме правили преди,
например така - this.innerHTML - и да изведем
вътрешното съдържание на нашите елементи. Но е по-добре да увием
this в долар jQuery по следния начин - $(this)
- в този случай ще можем да прилагаме към него
всички методи и вериги от jQuery.
Нека разгледаме следния HTML код:
<p class="www">text</p>
<p class="www">text</p>
<p class="www">text</p>
<p>text</p>
В този пример трябва да получим всички елементи
с клас www и да изведем на екрана
тяхното съдържание. Как се прави: с помощта на
$('.www') получаваме нужните ни елементи,
след това с помощта на each(test) прилагаме към всеки
получен елемент функцията test.
Тя първо ще се приложи към първия параграф,
след това към втория, към третия и така нататък.
Вътре във функцията this ще сочи
към този елемент, към който се прилага функцията
test - първо това ще бъде първият елемент,
след това вторият, и така нататък. С помощта на такава
конструкция $(this) вместо обикновения
this от JavaScript ще получим jQuery елемент
и ще приложим към него метода html, който
ще получи текста на нашия елемент. И след това
той просто ще се изведе на екрана:
/*
Името на функцията test пишем без кавички и (),
тъй като ни трябва нейният код, а не резултат:
*/
$('.www').each(test);
function test() {
alert($(this).html());
}
За решаване на тази задача могат да се използват и анонимни функции - това се прави най-често:
$('.www').each(function() {
alert($(this).html());
});
Също така можем да подадем на метода each
callback функция с параметри.
Нека в следващия пример добавим в края
на всички li на страницата техния пореден номер. Сега
в нашата анонимна функция ще подаваме номера
на елемента и самия елемент:
$('li').each(function (index, elem) {
$(elem).append(index);
});
А сега вместо elem използваме
this:
$('li').each(function (index) {
$(this).append(index);
});
Променете съдържанието на всички li на техния
пореден номер.