2012-01-28 29 views
6

Tengo el siguiente código que estoy revisando las columnas de las tablas y si es la última columna quiero que haga algo diferente. En este momento es difícil codificado, pero ¿cómo puedo cambiar lo que sabe automáticamente su la última columnaobtener la última iteración en jquery cada

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

Así, las etiquetas 'td' se utilizan en cada fila, qué quiere el último td, o el último TD en cada fila? – loganfsmyth

+0

Vine aquí desde google en busca de una respuesta a la pregunta del título, que es más genérica que lo que necesitaba el OP ... Entonces, ¿cómo saber cuál es la última iteración de $ .each (algo, función (...) {...}); cuando 'something' es un objeto, en lugar de una matriz? –

Respuesta

10

Si desea acceder a la longitud interior del .each() de devolución de llamada, a continuación, solo necesita obtener la longitud de antemano para que esté disponible en su alcance.

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, pero no tiene sentido volver a calcular todo eso cuando necesite el selector para otros usos; también podría guardar el objeto jQuery para que pueda usarlo más de una vez. – jfriend00

-2

Si lo que quieres es la última columna, puede utilizar

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

Si usted quiere hacer las cosas con otras columnas, vaya para

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

se puede utilizar en lugar de data()addclass() si se siente cómodo con eso.

Si todo lo que quiere hacer es no tener una coma al final de la cadena, sólo podría cortarlo después:

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

Parece que su objetivo es hacer una lista separada por comas de los valores, ¿por qué no recoja los valores y utiliza el método array 'unirse' separado?

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

Algo así debe hacerlo:

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

El último sería 'index === size-1'. – jeremy

Cuestiones relacionadas