2010-12-20 11 views
5

Tengo una tabla como la siguiente:jQuery.toggle() extremadamente lento en muchas <TR> elementos

<table> 
    <tr class="a"><td></td></tr> 
    <tr class="b"><td></td></tr> 
</table> 

hay cerca de 800 filas y la mayoría de ellos de la clase a. Ahora quiero cambiar estas filas como esto:

$("#toggle_a").click(function(){ 
     $("tr.a").toggle(); 
    }); 
    $("#toggle_b").click(function(){ 
     $("tr.b").toggle(); 
    }); 

Pero esto es realmente muy lento y la mayoría de las veces el navegador quiere detener la acción.

¿Alguien tiene una idea de cómo hacer que esto sea más rápido y utilizable?

Respuesta

3

Parece pues jQuery elemento de búsqueda por nombre de la clase ..

Nota: El selector de clase es uno de los más lentos en selectores de jQuery; en IE es en bucle a través de todo el DOM. Evite usándolo siempre que sea posible.

también comprobar this artículo

+0

Esto no es realmente el problema, es el reflujo de la tabla :) –

+0

sí lo sé, pero ¿cómo llamar a varias filas en lugar de a clases? – adnek

+0

puede usar cada instrucción y vincular haga clic una vez document.ready. Pero algunos muchachos expirienced sugieren reemplazar la mesa. –

1

No utilizar tablas si no se muestran los datos tabulares.

Los navegadores son notoriamente lentos cuando tiene tablas muy grandes (debido a la complejidad en las tablas de renderizado). Y habría bastante reflujo con este tipo de cambio.

+0

en realidad estoy usando datos tabulares reales, por lo que no hay ninguna solución – adnek

+1

@adenk - Considere tablas más pequeñas. 800 filas no son fáciles de usar, quizás un enfoque más dinámico ayudaría. Mostrando 40 filas a la vez, agregue paginación, quizás use AJAX para completar la tabla. – Oded

0

En lugar de usar la estructura de la tabla, use la etiqueta LI. Agilizará el proceso de renderizado html.

<UL style="padding: 0; list-style-type: none;"> 
    <LI class="a">1</LI> 
    <LI class="b">2</LI> 
    <LI>3</LI> 
    <LI>4</LI> 
</UL> 

Ahora puede escribir el selector sobre esto. Esto sin duda será una mejora

3

que tenía un problema similar, pero con pocas líneas, alrededor de 200.

que utilizan .hide() y .show() y ahora esta casi instantánea.

+0

Esta solución funcionó perfectamente, y me permitió evitar tener que cambiarme de un diseño de tabla (es información tabular). – Susan

+0

Funcionó muy bien para mí también. Supongo que toggle() usa mucho más procesamiento que una simple declaración de cambio. –

Cuestiones relacionadas