Estou pesquisando e pesquisando no Stack Overflow há algum tempo, mas simplesmente não consigo contornar esse problema.
Eu tenho uma tabela HTML padrão, contendo, digamos, frutas. Igual a:
<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>
Acima disso, tenho uma caixa de texto, que gostaria de pesquisar na tabela conforme o usuário digita. Portanto, se digitarem, Gre
por exemplo, a linha laranja da tabela desaparecerá, deixando a Apple e o Grapes. Se eles continuassem digitando, Green Gr
a linha da Apple deveria desaparecer, deixando apenas uvas. Espero que isso esteja claro.
E, se o usuário excluir parte ou toda a sua consulta da caixa de texto, gostaria que todas as linhas que agora correspondem à consulta reapareçam.
Embora eu saiba como remover uma linha da tabela no jQuery, tenho pouca idéia de como proceder para pesquisar e remover linhas seletivamente com base nisso. Existe uma solução simples para isso? Ou um plugin?
Se alguém pudesse me apontar na direção certa, seria brilhante.
Obrigado.
fonte
Respostas:
Eu criei esses exemplos.
Simples indexOf pesquisa
Demonstração : http://jsfiddle.net/7BUmG/2/
Pesquisa de expressão regular
Funcionalidades mais avançadas, usando expressões regulares, permitem pesquisar palavras em qualquer ordem na linha. Funcionará da mesma forma se você digitar
apple green
ougreen apple
:Demonstração : http://jsfiddle.net/dfsq/7BUmG/1133/
Debounce
Ao implementar a filtragem de tabela com pesquisa em várias linhas e colunas, é muito importante considerar o desempenho e a velocidade / otimização da pesquisa. Simplesmente dizendo que você não deve executar a função de pesquisa a cada pressionamento de tecla, não é necessário. Para impedir que a filtragem seja executada com muita frequência, você deve devolvê-la. O exemplo de código acima se tornará:
Você pode escolher qualquer implementação de debounce, por exemplo, no Lodash _.debounce , ou pode usar algo muito simples como eu uso nas próximas demos (debounce daqui ): http://jsfiddle.net/7BUmG/6230/ e http: / /jsfiddle.net/7BUmG/6231/ .
fonte
#table
para aid
da minha mesa? Precisaria haver alterações adicionais para trabalhar<thead>
e<tbody>
tags? Incluí o script e o html no link jsfiddle, alterando o#id
, mas não recebo filtragem.<tbody>
deve alterar paravar $rows = $('#id-of-your-table tbody tr');
.<tr>
DOMElement e a sequência. Dessa forma,keyup()
você pesquisa essas strings (que são muito mais rápidas) e tem as linhas correspondentes prontas para serem manipuladas. Esse primeiro procedimento de configuração caro deve ser executado apenas uma vez, logo após o carregamento. Todas essas mudanças são apenas pequenas correções, a parte central real ainda permanece como mostrado nesta resposta. Essa abordagem também é possível e muito fácil de implementar sem o jQuery.$('#table tr:not(:first)')
seletor.Eu tenho um plugin jquery para isso. Ele usa jquery-ui também. Você pode ver um exemplo aqui http://jsfiddle.net/tugrulorhan/fd8KB/1/
fonte
Aqui está a melhor solução para pesquisar dentro da tabela HTML, cobrindo toda a tabela (todos td, tr na tabela), javascript puro e o mais curto possível:
fonte
Obrigado @dfsq pelo código muito útil!
Fiz alguns ajustes e talvez alguns outros também. Garanto que você pode procurar várias palavras, sem ter uma correspondência estrita.
Linhas de exemplo:
Você poderia procurar por 'ap pe' e ele reconheceria a primeira linha.
Você poderia procurar por 'banana apple' e reconheceria a segunda linha.
Demo: http://jsfiddle.net/JeroenSormani/xhpkfwgd/1/
fonte
var $rows = $('#WorldPlayersTable tr');
para -var $rows = $('#WorldPlayersTable tbody tr');
Achei a resposta do dfsq extremamente útil. Fiz algumas pequenas modificações aplicáveis a mim (e estou postando aqui, caso seja de alguma utilidade para outras pessoas).
class
como ganchos, em vez de elementos da tabelatr
class
enquanto mostra / oculta os pais$rows
elementos de texto em uma matriz apenas uma vez (e evitando o$rows.length
cálculo de tempos)fonte
Solução Javascript Pura:
fonte
você pode usar javascript nativo como este
fonte
O plug - in JS datável também é uma boa alternativa para acomodar o recurso de pesquisa da tabela html
https://datatables.net/examples/basic_init/zero_configuration.html
fonte
Se você pode separar html e dados, pode usar bibliotecas externas, como tabelas de dados ou a que criei. https://github.com/thehitechpanky/js-bootstrap-tables
Esta biblioteca usa a função keyup para recarregar os dados tabled e, portanto, parece funcionar como pesquisa.
fonte