He estado buscando en Google y buscando Stack Overflow por un tiempo, pero no puedo solucionar este problema.
Tengo una tabla HTML estándar que contiene, por ejemplo, fruta. Al igual que:
<table>
<tr>
<td>Apple</td>
<td>Green</td>
</tr>
<tr>
<td>Grapes</td>
<td>Green</td>
</tr>
<tr>
<td>Orange</td>
<td>Orange</td>
</tr>
</table>
Por encima de esto, tengo un cuadro de texto, que me gustaría buscar en la tabla a medida que un usuario escribe. Entonces, si Gre
escriben, por ejemplo, la fila naranja de la tabla desaparecería, dejando Apple y Grapes. Si Green Gr
continúan y escriben, la fila de Apple debería desaparecer, dejando solo uvas. Espero que esto quede claro.
Y, si el usuario elimina parte o la totalidad de su consulta del cuadro de texto, me gustaría que reaparezcan todas las filas que ahora coinciden con la consulta.
Si bien sé cómo eliminar una fila de la tabla en jQuery, tengo poca idea sobre cómo hacer la búsqueda y eliminar filas selectivamente en función de esto. ¿Hay una solución simple para esto? O un complemento?
Si alguien pudiera señalarme en la dirección correcta, sería genial.
Gracias.
fuente
Respuestas:
Creé estos ejemplos.
Índice simple de búsqueda
Demostración : http://jsfiddle.net/7BUmG/2/
Búsqueda de expresiones regulares
La funcionalidad más avanzada que usa expresiones regulares le permitirá buscar palabras en cualquier orden en la fila. Funcionará igual si escribe
apple green
ogreen apple
:Demostración : http://jsfiddle.net/dfsq/7BUmG/1133/
Debounce
Cuando implementa el filtrado de tablas con búsqueda en varias filas y columnas, es muy importante que considere el rendimiento y la velocidad / optimización de búsqueda. Simplemente decir que no debe ejecutar la función de búsqueda en cada pulsación de tecla, no es necesario. Para evitar que el filtrado se ejecute con demasiada frecuencia, debe eliminarlo. El ejemplo de código anterior se convertirá en:
Puede elegir cualquier implementación de eliminación de rebotes, por ejemplo, de Lodash _.debounce , o puede usar algo muy simple como el que uso en las próximas demostraciones (debounce desde aquí ): http://jsfiddle.net/7BUmG/6230/ y http: / /jsfiddle.net/7BUmG/6231/ .
fuente
#table
elid
de mi mesa? ¿Tendría que haber cambios adicionales para trabajar<thead>
y<tbody>
etiquetas? He incluido el script y el html desde el enlace jsfiddle, cambiando el#id
, pero no obtengo filtrado.<tbody>
que debe cambiarvar $rows = $('#id-of-your-table tbody tr');
.<tr>
DOMElement y la cadena. De esta manera, alkeyup()
buscar esas cadenas (que es mucho más rápido) y tener las filas correspondientes listas para ser manipuladas. Ese primer procedimiento de configuración costoso debe ejecutarse solo una vez justo después de la carga. Todos estos cambios son solo correcciones menores, la parte central real aún permanece como se muestra en esta respuesta. Este enfoque también es posible y bastante fácil de implementar sin jQuery.$('#table tr:not(:first)')
selector.Tengo un complemento jquery para esto. Utiliza jquery-ui también. Puede ver un ejemplo aquí http://jsfiddle.net/tugrulorhan/fd8KB/1/
fuente
Aquí está la mejor solución para buscar dentro de la tabla HTML mientras cubre toda la tabla , (todo td, tr en la tabla), javascript puro y lo más breve posible:
fuente
¡Gracias @dfsq por el código tan útil!
He hecho algunos ajustes y tal vez a otros también les gusten. Me aseguré de que puede buscar varias palabras, sin tener una coincidencia estricta.
Filas de ejemplo:
Podrías buscar 'ap pe' y reconocería la primera fila
Podrías buscar 'banana apple' y reconocería la segunda fila
Demostración: http://jsfiddle.net/JeroenSormani/xhpkfwgd/1/
fuente
var $rows = $('#WorldPlayersTable tr');
a -var $rows = $('#WorldPlayersTable tbody tr');
Encontré que la respuesta de dfsq a sus comentarios es extremadamente útil. Hice algunas modificaciones menores aplicables a mí (y lo estoy publicando aquí, en caso de que sea de alguna utilidad para otros).
class
como ganchos, en lugar de elementos de tablatr
class
mientras se muestra / se oculta el padre$rows
elementos de texto en una matriz solo una vez (y evitando el$rows.length
cálculo de tiempos)fuente
Solución Javascript Pura:
fuente
puedes usar javascript nativo como este
fuente
El complemento Datatable JS también es una buena alternativa para aceptar la función de búsqueda para la tabla html
https://datatables.net/examples/basic_init/zero_configuration.html
fuente
Si puede separar html y datos, puede usar bibliotecas externas como tablas de datos o la que yo creé. https://github.com/thehitechpanky/js-bootstrap-tables
Esta biblioteca utiliza la función keyup para recargar datos de tabla y, por lo tanto, parece funcionar como la búsqueda.
fuente