Ich habe eine Weile gegoogelt und nach Stapelüberlauf gesucht, aber ich kann dieses Problem einfach nicht umgehen.
Ich habe eine Standard-HTML-Tabelle, die beispielsweise Obst enthält. Wie so:
<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>
Darüber habe ich ein Textfeld, in dem ich die Tabelle als Benutzertyp durchsuchen möchte. Wenn sie Gre
zum Beispiel tippen, verschwindet die orangefarbene Zeile der Tabelle und der Apfel und die Trauben bleiben zurück. Wenn sie Green Gr
weitermachen und tippen, sollte die Apple-Reihe verschwinden und nur noch Trauben übrig bleiben. Ich hoffe das ist klar.
Und sollte der Benutzer einige oder alle seiner Abfragen aus dem Textfeld löschen, möchte ich, dass alle Zeilen, die jetzt mit der Abfrage übereinstimmen, wieder angezeigt werden.
Obwohl ich weiß, wie eine Tabellenzeile in jQuery entfernt wird, habe ich keine Ahnung, wie ich die Suche durchführen und Zeilen basierend darauf selektiv entfernen soll. Gibt es eine einfache Lösung dafür? Oder ein Plugin?
Wenn mich jemand in die richtige Richtung weisen könnte, wäre es brillant.
Danke dir.
quelle
Antworten:
Ich habe diese Beispiele erstellt.
Einfacher Index der Suche
Demo : http://jsfiddle.net/7BUmG/2/
Suche nach regulären Ausdrücken
Mit erweiterten Funktionen, die reguläre Ausdrücke verwenden, können Sie Wörter in beliebiger Reihenfolge in der Zeile suchen. Es funktioniert genauso, wenn Sie Folgendes eingeben
apple green
odergreen apple
:Demo : http://jsfiddle.net/dfsq/7BUmG/1133/
Entprellen
Wenn Sie die Tabellenfilterung mit Suche über mehrere Zeilen und Spalten implementieren, ist es sehr wichtig, dass Sie die Leistung und die Suchgeschwindigkeit / -optimierung berücksichtigen. Es ist nicht erforderlich, einfach zu sagen, dass Sie die Suchfunktion nicht bei jedem einzelnen Tastendruck ausführen sollten. Um zu verhindern, dass die Filterung zu oft ausgeführt wird, sollten Sie sie entprellen. Das obige Codebeispiel wird zu:
Sie können eine beliebige Entprellungsimplementierung auswählen, beispielsweise aus Lodash _.debounce , oder Sie können etwas sehr Einfaches verwenden, wie ich es in den nächsten Demos verwende (Entprellen von hier ): http://jsfiddle.net/7BUmG/6230/ und http: / /jsfiddle.net/7BUmG/6231/ .
quelle
#table
in dasid
meines Tisches ändern ? Müsste es zusätzliche Änderungen geben, um mit<thead>
und<tbody>
Tags zu arbeiten? Ich habe das Skript und HTML aus dem jsfiddle-Link eingefügt und das geändert#id
, aber ich bekomme keine Filterung.<tbody>
sollten Sie zu wechselnvar $rows = $('#id-of-your-table tbody tr');
.<tr>
Fügen Sie alle verfeinerten Zeichenfolgen in ein Array von Objekten mit zwei Feldern ein: einen Verweis auf das DOMElement und die Zeichenfolge. Auf diese Weisekeyup()
durchsuchen Sie diese Zeichenfolgen (was viel schneller ist) und halten die entsprechenden Zeilen bereit, um bearbeitet zu werden. Dieser erste kostspielige Einrichtungsvorgang sollte dann nur einmal direkt nach dem Laden ausgeführt werden. Alle diese Änderungen sind nur geringfügige Korrekturen. Der eigentliche zentrale Teil bleibt weiterhin wie in dieser Antwort gezeigt. Dieser Ansatz ist auch ohne jQuery möglich und recht einfach zu implementieren.$('#table tr:not(:first)')
Selektor verwenden.Ich habe ein JQuery-Plugin dafür. Es verwendet auch jquery-ui. Ein Beispiel finden Sie hier http://jsfiddle.net/tugrulorhan/fd8KB/1/
quelle
Hier ist die beste Lösung für die Suche in einer HTML-Tabelle, während die gesamte Tabelle (alle td, tr in der Tabelle), reines Javascript und so kurz wie möglich abgedeckt werden:
quelle
Vielen Dank an @dfsq für den sehr hilfreichen Code!
Ich habe einige Anpassungen vorgenommen und vielleicht auch andere. Ich habe dafür gesorgt, dass Sie nach mehreren Wörtern suchen können, ohne eine strikte Übereinstimmung zu haben.
Beispielzeilen:
Sie könnten nach 'ap pe' suchen und es würde die erste Reihe erkennen.
Sie könnten nach 'banana apple' suchen und es würde die zweite Reihe erkennen
Demo: http://jsfiddle.net/JeroenSormani/xhpkfwgd/1/
quelle
var $rows = $('#WorldPlayersTable tr');
zu -var $rows = $('#WorldPlayersTable tbody tr');
Ich fand die Antwort von dfsq in seinen Kommentaren äußerst nützlich. Ich habe einige geringfügige Änderungen an mir vorgenommen (und ich veröffentliche sie hier, falls sie für andere von Nutzen sind).
class
als Hooks anstelle von Tabellenelemententr
class
beim Ein- / Ausblenden des Elternteils$rows
Textelemente nur einmal in einem Array speichern (und Zeitberechnungen vermeiden$rows.length
).quelle
Reine Javascript-Lösung:
quelle
Sie können natives Javascript wie dieses verwenden
quelle
Das datierbare JS-Plugin ist auch eine gute Alternative zur erweiterten Suchfunktion für HTML-Tabellen
https://datatables.net/examples/basic_init/zero_configuration.html
quelle
Wenn Sie HTML und Daten trennen können, können Sie externe Bibliotheken wie Datentabellen oder die von mir erstellte verwenden. https://github.com/thehitechpanky/js-bootstrap-tables
Diese Bibliothek verwendet die Keyup-Funktion zum erneuten Laden von Tabellendaten und scheint daher wie eine Suche zu funktionieren.
quelle