Od jakiegoś czasu szukam w Google i przeszukuję Stack Overflow, ale po prostu nie mogę obejść tego problemu.
Mam standardową tabelę HTML zawierającą, powiedzmy, owoce. Tak jak to:
<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>
Powyżej mam pole tekstowe, które chciałbym przeszukać w tabeli jako typ użytkownika. Tak więc, jeśli wpiszą Gre
na przykład, pomarańczowy wiersz tabeli zniknie, pozostawiając jabłko i winogrona. Jeśli kontynuowali i wpisywali, Green Gr
wiersz Apple powinien zniknąć, pozostawiając tylko winogrona. Mam nadzieję, że to jasne.
I jeśli użytkownik usunie część lub całość swojego zapytania z pola tekstowego, chciałbym, aby wszystkie wiersze, które teraz pasują do zapytania, pojawiły się ponownie.
Chociaż wiem, jak usunąć wiersz tabeli w jQuery, nie mam pojęcia, jak przeprowadzić wyszukiwanie i selektywnie usuwać wiersze na tej podstawie. Czy jest na to proste rozwiązanie? Albo wtyczka?
Gdyby ktokolwiek mógł wskazać mi właściwy kierunek, byłoby wspaniale.
Dziękuję Ci.
źródło
Odpowiedzi:
Stworzyłem te przykłady.
Proste wyszukiwanie indeksu
Demo : http://jsfiddle.net/7BUmG/2/
Wyszukiwanie wyrażeń regularnych
Bardziej zaawansowana funkcjonalność wykorzystująca wyrażenia regularne pozwoli Ci wyszukiwać słowa w dowolnej kolejności w wierszu. Będzie działać tak samo, jeśli wpiszesz
apple green
lubgreen apple
:Demo : http://jsfiddle.net/dfsq/7BUmG/1133/
Obalić
Wdrażając filtrowanie tabel z wyszukiwaniem w wielu wierszach i kolumnach, bardzo ważne jest, aby wziąć pod uwagę wydajność i szybkość / optymalizację wyszukiwania. Mówiąc po prostu, nie powinieneś uruchamiać funkcji wyszukiwania przy każdym naciśnięciu klawisza, nie jest to konieczne. Aby zapobiec zbyt częstemu uruchamianiu filtrowania, należy je usunąć. Powyższy przykład kodu stanie się:
Możesz wybrać dowolną implementację debounce, na przykład z Lodash _.debounce , lub możesz użyć czegoś bardzo prostego, jak używam w następnych demonstracjach (debounce stąd ): http://jsfiddle.net/7BUmG/6230/ i http: / /jsfiddle.net/7BUmG/6231/ .
źródło
#table
doid
mojego stołu? Czy potrzebne byłyby dodatkowe zmiany do pracy z tagami<thead>
i<tbody>
tagami? Dołączyłem skrypt i html z linku jsfiddle, zmieniając#id
, ale nie otrzymuję żadnego filtrowania.<tbody>
, powinieneś zmienić navar $rows = $('#id-of-your-table tbody tr');
.<tr>
DOMElement i ciąg. W ten sposóbkeyup()
przeszukujesz te ciągi (co jest o wiele szybsze) i masz odpowiednie wiersze gotowe do manipulacji. Ta pierwsza kosztowna procedura konfiguracji powinna zostać wykonana tylko raz, zaraz po załadowaniu. Wszystkie te zmiany to tylko drobne poprawki, rzeczywista centralna część nadal pozostaje taka, jak pokazano w tej odpowiedzi. Takie podejście jest również możliwe i całkiem łatwe do zaimplementowania bez jQuery.$('#table tr:not(:first)')
selektora.Mam do tego wtyczkę jquery. Używa również jquery-ui. Możesz zobaczyć przykład tutaj http://jsfiddle.net/tugrulorhan/fd8KB/1/
źródło
Tutaj jest najlepszym rozwiązaniem dla poszukiwania wewnątrz tabeli HTML, obejmując wszystkie tabeli (wszystkie td, tr w tabeli), czystego javascript i jak zwarcia , jak to możliwe:
źródło
Dziękuję @dfsq za bardzo pomocny kod!
Dokonałem pewnych poprawek i może inne też je lubią. Zapewniłem, że możesz wyszukiwać wiele słów bez ścisłego dopasowania.
Przykładowe wiersze:
Możesz wyszukać „ap pe” i rozpozna pierwszy wiersz
Możesz wyszukać „jabłko bananowe” i rozpozna drugi wiersz
Demo: http://jsfiddle.net/JeroenSormani/xhpkfwgd/1/
źródło
var $rows = $('#WorldPlayersTable tr');
na -var $rows = $('#WorldPlayersTable tbody tr');
Uważam, że odpowiedź dfsq na jej komentarze jest niezwykle przydatna. Dokonałem kilku drobnych modyfikacji, które mnie dotyczą (i zamieszczam je tutaj, na wypadek, gdyby przydało się to innym).
class
jako haczyków zamiast elementów tabelitr
class
podczas pokazywania / ukrywania rodzica$rows
jednokrotnemu przechowywaniu elementów tekstowych w tablicy (i unikaniu$rows.length
obliczeń czasu)źródło
Czyste rozwiązanie JavaScript:
źródło
możesz użyć natywnego javascript w ten sposób
źródło
Wtyczka Datatable JS jest również dobrą alternatywą dla funkcji wyszukiwania tabeli html
https://datatables.net/examples/basic_init/zero_configuration.html
źródło
Jeśli możesz oddzielić HTML i dane, możesz użyć bibliotek zewnętrznych, takich jak zbiory danych lub ta, którą utworzyłem. https://github.com/thehitechpanky/js-bootstrap-tables
Ta biblioteka używa funkcji keyup do przeładowywania danych tablicowych i dlatego wygląda na to, że działa jak wyszukiwanie.
źródło