Ver Mensaje Individual
  #4 (permalink)  
Antiguo 10/04/2012, 12:25
Avatar de Naahuel
Naahuel
 
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Problema con filtros

Te hice un código de ejemplo como para que estudiemos el asunto.
Probá este código:

Código HTML:
Ver original
  1. <!doctype html>
  2.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  3.     <script type="text/javascript">
  4.         $(function(){
  5.             //############################################
  6.             //llenar la tabla, ignorar esta parte
  7.             //############################################
  8.             var s_html = '';
  9.             var i_num_elems = 1000;
  10.             var i_rnd;
  11.             for(i=0; i<i_num_elems; i++){
  12.                 i_rnd = Math.floor(Math.random()*1111);
  13.                 s_html += '<tr><td>'+ i_rnd  +'</td><td>'+ (i_rnd/2) +'</td><td>'+ (i_rnd/3) +'</td></tr>';
  14.             }
  15.             $('table tbody').html(s_html);
  16.            
  17.             //############################################
  18.             //Obtener la tabla y otros elementos
  19.             //############################################
  20.             var $tabla          = $('table.filtrar');
  21.             var $tabla_row  = $tabla.find('tbody tr');
  22.            
  23.             //############################################
  24.             // Filtrado
  25.             //############################################
  26.             var $inp_filtro = $('input.filtro');        //obtener el elemento que filtra
  27.             var s_val = '';
  28.             var $self, $padre;
  29.             $inp_filtro.keyup(function(){               //filtrar la tabla al escribir
  30.                 s_val = $(this).val();
  31.                 $tabla_row.show().filter(':not(:contains("'+ s_val +'"))').hide();
  32.             });
  33.         });
  34.     </script>
  35.     <title>Filtro de tabla</title>
  36. </head>
  37.     <p><label>Filtro: </label><input type="text" class="filtro" /></p>
  38.     <table class="filtrar" border="1">
  39.         <thead>
  40.             <tr>
  41.                 <th>Encabezado 1</th>
  42.                 <th>Encabezado 2</th>
  43.                 <th>Encabezado 3</th>
  44.             </tr>
  45.         </thead>
  46.         <tbody>
  47.             <!--tabla vacia, llenada con valores arbitrarios-->
  48.         </tbody>
  49.     </table>
  50. </body>
  51. </html>

Cambiá la variable i_num_elems para agregar o quitar filas. Creo que es bastante rápido. Lo probé con 2000 filas y la demora que tiene es relativamente pequeña.

Observá que no recorremos el DOM continuamente ni tampoco usamos ciclos (al menos no en nuestro código, pero los sí en los métodos de jQuery). Solamente usamos .filter() para filtrar la colección de filas que guardamos en la memoria en la variable $tabla_row.
__________________
nahueljose.com.ar