2011-10-26 38 views
6

La siguiente jQuery es extremadamente lenta (~ 7 seg). ¡Claramente lo estoy haciendo de la manera incorrecta!Copie el contenido de una columna a otra en jQuery

que estoy tratando de copiar el contenido de la columna a la columna col0 en una tabla HTML por lo que si es Col 2, entonces tengo que copiar la columna 2 a la columna 0.

for (var i=0;i<31;i++) 
    $('.grid tr:nth-child(' + i + ') td:first-child').text(
    $('.grid tr:nth-child(' + i + ') td:nth-child(' + col + ')').text() 
    ); 

HTML:

<table> 
    <tr><td>A</td><td>D</td><td>G</td></tr> 
    <tr><td>B</td><td>E</td><td>H</td></tr> 
    <tr><td>C</td><td>F</td><td>I</td></tr> 
    <!-- etc. --> 
</table> 

Respuesta

4

No es necesario que seleccione cada celda de la tabla individualmente. Puede seleccionar la columna fuente y las columnas de destino e iterar sobre ellas:

// Get the target column table cells. This will select the first cell from 
// each row in the table. 
var target = $('.grid tr td:first-child'); 

// Iterate over each cell in the source column and copy its text to the 
// corresponding cell in the target column. 
$('.grid tr td:nth-child(' + (col + 1) + ')').each(function (rowIndex) { 
    target.slice(rowIndex, rowIndex + 1).text($(this).text()); 
}); 
+0

Whoops, tenían la fuente y el objetivo intercambiados originalmente. Fijo. – Annabelle

+0

frijoles fríos. Esto funciona si cambio 'slice' a' eq'. Fuera de interés, ¿por qué mi código original era tan lento? – James

+0

Oh, dejé el 2do parámetro para slice(). Fijo. – Annabelle

1

Otra opción. No estoy seguro de cuál funcionaría más rápido. Simplemente quita la primera columna, ya que iba a ser reemplazado, a continuación, antepone la columna de elección:

col = 2; 
$('.grid td:first-child').remove(); 
$('.grid td:nth-child('+(--col)+')').each(function(){ 
    $(this).parent('tr').prepend('<td>'+$(this).text()+'</td>'); 
}); 

Hay que ver: here.

Cuestiones relacionadas