2011-02-14 26 views
26

Necesito una forma de interactuar con cada elemento td en un tr.jquery seleccionando cada td en un tr

Para más detalles, me gustaría acceder a la primera fila de la tabla, luego a la primera columna, luego a la segunda columna, etc. Luego, avance a la segunda fila y repita el proceso.

algo como:

pseudo-código:

for each row in table 
{ 
    for each column in row 
    { 
    do cool things 
    } 
} 

jQuery:

$('#tblNewAttendees tr').each(function() { 
    alert('tr'); 
    //Cool jquery magic that lets me iterate over all the td only in this row 
    $(magicSelector).each(function(){ 
    alert('hi'); 
    }); 

}); 

HTML:

<table> 
    <thead> 
      <th>someHeader</th> 
    </thead> 
    <tbody> 
      <tr> 
       <td>want to grab this first</td> 
       <td> this second </td> 
      </tr> 
      <tr> 
       <td>this third</td> 
       <td>this fourth</td> 
      </tr> 
    </tbody> 
</table> 

Respuesta

80

Usted simplemente puede hacer lo siguiente en el interior de su bucle TR :

$(this).find('td').each (function() { 
    // do your cool stuff 
});       
+19

Usted podría utilizar niños() en lugar de find() para asegurarse de que sólo un nivel por debajo del DOM tr es buscado. find() buscará en todos los niveles, de modo que si el td tiene contenido complejo (por ejemplo, otra tabla con celdas, ¡horror!), entonces children() es una apuesta más segura (y más rápida). – carbontracking

9

Su $(magicSelector) podría ser $('td', this). Esto capturará todos td que son hijos de this, que en su caso es cada tr. Esto es lo mismo que hacer $(this).find('td').

$('td', this).each(function() { 
// Logic 
}); 
+1

Cómo llamar al elemento iterado (td)? – FrenkyB

21

No necesita un selector jQuery en absoluto. Ya tiene una referencia a las celdas en cada fila a través de la propiedad cells.

$('#tblNewAttendees tr').each(function() { 

    $.each(this.cells, function(){ 
     alert('hi'); 
    }); 

}); 

Es mucho más eficaz de utilizar una colección que ya tiene, que para crear una nueva colección a través de la selección de DOM.

Aquí he usado el método jQuery.each()(docs), que es solo un método genérico para la iteración y la enumeración.

+1

+1: jQuery es genial, pero no cuando lo estás usando para reinventar el DOM. Para eso no es para eso. –

+0

@Joel: No podría estar más de acuerdo. – user113716

+0

me preguntaba cómo obtener el innerHTML del td ahora: S – themis

3

expandiendo la respuesta anterior la función 'cada' devolverá el objeto html de celda de tabla. envolver eso en $() le permitirá realizar acciones jquery en él.

$(this).find('td').each (function(column, td) { 
    $(td).blah 
}); 
Cuestiones relacionadas