2012-01-28 13 views
6

Ho il seguente codice che sto passando attraverso le colonne delle tabelle e se è l'ultima colonna voglio che faccia qualcosa di diverso. In questo momento la sua difficile codificato, ma come posso cambiare in modo che conosce automaticamente la sua l'ultima colonnaottiene l'ultima iterazione in jquery ogni

$(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

Quindi, tag 'td' sono usati in ogni riga, vuoi l'ultimo td, o l'ultimo td in ogni riga? – loganfsmyth

+0

Sono venuto qui da Google cercando una risposta alla domanda del titolo, che è più generica di quello che l'OP aveva bisogno ... Quindi, come sapere quale è l'ultima iterazione di $ .each (qualcosa, funzione (...) {...}); quando 'something' è un oggetto, invece di un array? –

risposta

10

Se si desidera accedere alla lunghezza interna della .each() callback, poi hai solo bisogno di ottenere la lunghezza in anticipo in modo che sia disponibile nel tuo ambito.

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 - ma non ha senso ricalcolare tutto ciò quando è necessario il selettore per altri usi - potrebbe anche salvare l'oggetto jQuery in modo da poterlo utilizzare più di una volta. – jfriend00

-2

Se invece si è l'ultima colonna, è possibile utilizzare

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

Se si vuole fare le cose con altre colonne, andare per

$(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 
    } 
}); 

È possibile utilizzare data() invece di addclass() se sei a tuo agio con questo.

Se tutto quello che vogliamo fare è non avere una virgola alla fine della stringa, si può solo tagliare fuori dopo:

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

Sembra che il vostro obiettivo è quello di fare una virgola elenco dei valori, perché non si raccolgono i valori e utilizza il metodo di matrice 'unirsi' separato?

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

Qualcosa del genere dovrebbe farlo:

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

L'ultimo sarebbe 'index === size-1'. – jeremy

Problemi correlati