2012-01-28 16 views
6

Mam następujący kod, który przechodzę przez kolumn tabel i jeśli jest to ostatnia kolumna chcę, aby zrobić coś innego. Teraz trudno kodowane, ale w jaki sposób można tak zmieniać automatycznie zna swoją ostatnią kolumnęuzyskać ostatnią iterację w jquery każdy

$(this).find('td').each(function (i) { 
    if(i > 0) //this one is fine..first column 
    { 
     if(i < 4) // hard coded..I want this to change 
     { 
      storageVAR += $(this).find('.'+classTD).val()+','; 
     } 
     else 
     { 
      storageVAR += $(this).find('.'+classTD).val(); 
     } 
    } 
}); 
+1

Tak, „td” tagi są wykorzystywane w każdym wierszu, chcesz do ostatniego TD, lub do ostatniego td w każdym wierszu? – loganfsmyth

+0

Przybyłem tutaj z google szukającego odpowiedzi na tytułowe pytanie, które jest bardziej ogólne niż to, czego potrzebował OP ... Więc, jak się dowiedzieć, która z nich jest ostatnią iteracją $ .each (coś, funkcja (...) {...}); kiedy 'coś' jest obiektem, zamiast tablicy? –

Odpowiedz

10

Jeśli chcesz otrzymać dostęp do długości wewnątrz .each() zwrotnego, a następnie musisz tylko uzyskać długość wcześniej, aby była dostępna w twoim zasięgu.

var cells = $(this).find('td'); 
var length = cells.length; 
cells.each(function(i) { 
    // you can refer to length now 
}); 
+0

var total = $ (this) .find ('td'). Length; – Autolycus

+1

@Autolycus - ale nie ma sensu w przeliczaniu wszystkiego, gdy potrzebujesz selektora do innych zastosowań - równie dobrze można zapisać obiekt jQuery, aby móc go używać więcej niż raz. – jfriend00

-2

Jeśli chcesz to ostatnia kolumna, można użyć

$(this).find('td:last') 

Jeśli chcesz robić rzeczy z innych kolumn, przejdź do

$(this).find('td:last').addClass("last"); 
$(this).find('td').each(function() { 
    if ($(this).hasClass("last")) { 
     // this is the last column 
    } else { 
     // this isn't the last column 
    } 
}); 

można użyć data() zamiast addclass() jeśli jesteś wygodne z tym.

Jeśli wszystko, co chcesz zrobić, nie mają przecinek na końcu łańcucha, można po prostu posiekać go potem:

storageVAR = storageVAR.substr(0, (storageVAR.length - 1); 
6

Wygląda jak twój cel jest, aby przecinkami listę wartości, dlaczego nie można zbierać wartości i użyć metody array „przyłączenia” rozdzielić?

var values = [] 
$(this).find('td .' + classTD).each(function(i) { 
    if (i > 0) values.push($(this).val()); 
}); 
storageVAR = values.join(','); 
1

Coś jak to powinno zrobić:

var $this = $(this), 
    size = $this.size(); 

$this.find('td').each(function (index) { 

    // FIRST 
    if(index == 0) 
    { 

    } 
    // LAST 
    else if(index == size) 
    { 

    } 
    // ALL THE OTHERS 
    else 
    { 

    } 

}); 
+1

Ostatni będzie "index === size-1". – jeremy

Powiązane problemy