Dlaczego parametr index w metodzie each zachowuje inaczej w tym scenariuszu?

http://jsfiddle.net/4H4FY/1/

$('li').each(function(index) {
    $('li').text(index);// This prints only 2s 
    console.log(index);// This prints 0, 1, 2 
});

Jak mogę to uzyskać tak, że 0, 1, 2 wydrukuje wzdłuż boku tagów <li>?

1
Squirrl 20 listopad 2013, 21:37

3 odpowiedzi

Najlepsza odpowiedź

Próbować:

$('li').each(function(index) {
    $(this).text(index);
});

Po prostu przekazując swój $('li') w .each() nie zostanie prawidłowo przechwytywanie kontekstu. Zamiast tego musisz użyć $(this).

A Przykład roboczy tutaj: http://jsfiddle.net/g7ZNM/1/

5
Stuart Kershaw 20 listopad 2013, 17:38

Za każdym razem, gdy przejdziesz przez pętlę, ustawienie tekstu dla każdy li do indeksu bieżącego. W końcu wszyscy będą ustawione na niezależnie od ostatniego indeksu.

Spróbuj tego zamiast tego:

$('li').each(function(index, item) {
    $(item).text(index); // This prints 0, 1, 2 
});
4
p.s.w.g 20 listopad 2013, 17:39

Użyj "tego", aby odnosić się do aktualnego "Li":

$('li').each(function(index) {
    $(this).text(index);// This prints 0,1,2
    console.log(index);// This prints 0, 1, 2 
});
1
Ankit Tyagi 20 listopad 2013, 17:41