Praca z metodą each w jQuery

Gdy mamy grupę elementów uzyskanych za pomocą jQuery, możemy wprowadzać w nich zmiany tylko dla wszystkich elementów jednocześnie.

Na przykład, jeśli chcemy zmienić tekst wszystkich znalezionych akapitów - nie uda nam się go zrobić różnym.

W tym przypadku pomoże nam specjalna metoda each, która pozwala zastosować jakąś funkcję do wszystkich elementów zestawu jQuery. Jednocześnie wewnątrz tej funkcji będziemy mogli rozróżnić elementy i postąpić inaczej z każdym z nich.

Zasadniczo each jest pętlą, za pomocą której można przejść przez wszystkie znalezione elementy. Odnośnik do tego elementu, przez który aktualnie przechodzi pętla będzie leżał w this.

Możemy po prostu skorzystać z tego this w czystym JavaScript, jak to robiliśmy wcześniej, na przykład tak - this.innerHTML - i wypisać wewnętrzną zawartość naszych elementów. Ale lepiej opakować this w dolara jQuery w ten sposób - $(this) - w tym przypadku będziemy mogli stosować do niego wszystkie metody i łańcuchy jQuery.

Przyjrzyjmy się następującemu kodowi HTML:

html<p class="www">text</p>
<p class="www">text</p>
<p class="www">text</p>
<p>text</p>

W tym przykładzie powinniśmy otrzymać wszystkie elementy z klasą www i wypisać na ekran ich zawartość. Jak to się robi: za pomocą $('.www') otrzymujemy potrzebne nam elementy, następnie za pomocą each(test) do każdego uzyskanego elementu stosujemy funkcję test. Najpierw zostanie zastosowana do pierwszego akapitu, potem do drugiego, do trzeciego i tak dalej.

Wewnątrz funkcji this będzie wskazywać na ten element, do którego stosowana jest funkcja test - najpierw będzie to pierwszy element, potem drugi, i tak dalej. Za pomocą takiej konstrukcji $(this) zamiast zwykłego this z JavaScript otrzymamy element jQuery i zastosujemy do niego metodę html, która uzyska tekst naszego elementu. No, a dalej po prostu zostanie wypisany na ekran:

javascript/*
  Nazwę funkcji test piszemy bez cudzysłowów i (),
  ponieważ potrzebny jest jej kod, a nie wynik:
*/

$('.www').each(test);

function test() {
  alert($(this).html());
}

Aby rozwiązać to zadanie, można również stosować funkcje anonimowe - tak robi się najczęściej:

javascript$('.www').each(function() {
  alert($(this).html());
});

Możemy również przekazać metodzie each funkcję callback z parametrami.

W następnym przykładzie dodajmy na końcu wszystkim li na stronie ich numer porządkowy. Teraz do naszej funkcji anonimowej będziemy przekazywać numer elementu i sam element:

javascript$('li').each(function (index, elem) {
  $(elem).append(index);
});

A teraz zamiast elem użyjmy this:

javascript$('li').each(function (index) {
  $(this).append(index);
});
Задание 1

Zmień zawartość wszystkich li na ich numer porządkowy.