2009-04-06 11 views

Respuesta

150
$("#your-table-id").empty(); 

Eso es lo más rápido que obtienes.

+0

Hmmm. Frustrante. Yo pensaría que eliminar sería mucho más rápido que la inserción. Me hace querer hacer cosas realmente feas, como esconder la mesa y crear una nueva cuando quiero actualizarla. – morgancodes

+9

Sí, bueno ... HTML no se creó para mostrar 3k filas en una página :) ¿No se te ocurre ninguna solución paginada? Eso lo haría mucho más rápido. Claro que exigiría más trabajo, pero será una experiencia de usuario mucho más rica. – Seb

+0

Lo construí paginado originalmente, pero el cliente insistió en desplazarse :(La buena noticia es que 3k filas es un caso marginal. Más común será unos cientos. – morgancodes

3

Dos cuestiones que puedo ver aquí:

  1. El vacío() y eliminar() de jQuery realmente hacen un poco de trabajo. Vea el JavaScript Function Call Profiling de John Resig para saber por qué.

  2. La otra cosa es que para grandes cantidades de datos tabulares puede considerar una biblioteca de cuadrícula de datos como la excelente DataTables para cargar sus datos sobre la marcha del servidor, aumentando el número de llamadas de red, pero disminuyendo el tamaño de esas llamadas. Tenía una tabla muy complicada con 1500 filas que se volvieron bastante lentas, cambiando a la nueva tabla basada en AJAX hizo que estos mismos datos parecieran bastante rápidos.

+0

Gracias artlung. Hacer algo como eso en realidad, obtener todos los datos a la vez del servidor, pero solo dibujar las filas de la tabla cuando sea necesario. – morgancodes

+0

Suena como una buena llamada. Me pregunto si preocuparse por la cantidad de filas en una tabla en un navegador siempre será un problema, o si la memoria de la mayoría de las computadoras aumenta, esto será un problema menor. – artlung

+0

La memoria no es un problema con la cantidad de datos que estoy cargando. El cuello de botella es la manipulación DOM. – morgancodes

0

si desea eliminar sólo es rápido .. se puede hacer, como a continuación ..

$("#tableId tbody tr").each(function(){ 
    this.parentNode.removeChild(this); 
}); 

pero, no puede haber algunos elementos por eventos binded en la tabla,

en ese caso ,

código anterior no es prevenir pérdida de memoria en el IE ... TT y no es rápido en FF ...

siento ....

55

Es mejor evitar cualquier tipo de bucles, basta con retirar todos los elementos directamente como esto:

$("#mytable > tbody").html(""); 
+3

'html (" ")' llamadas 'empty()' internamente –

+3

Una buena solución para mí porque no elimina el encabezado de una tabla. ¡Gracias! – Daria

+0

@Daria usa los selectores al máximo, esto mantendrá sus encabezados en su lugar: $ ('table tbody'). Empty(); – Dani

-2

Usted podría intentar esto ...

var myTable= document.getElementById("myTable"); 
if(myTable== null) 
    return; 
var oTBody = myTable.getElementsByTagName("TBODY")[0]; 
if(oTBody== null) 
    return; 
try 
{ 
    oTBody.innerHTML = ""; 
} 
catch(e) 
{ 
    for(var i=0, j=myTable.rows.length; i<j; i++) 
     myTable.deleteRow(0); 
} 
-1

funciona este para mí:

1- Agregar clase para cada fila "RemoveRow"

2- en el jQuery

$(".removeRow").remove(); 
Cuestiones relacionadas