J'ai cherché sur Google et recherché Stack Overflow pendant un certain temps, mais je ne peux tout simplement pas contourner ce problème.
J'ai un tableau HTML standard, contenant, par exemple, des fruits. Ainsi:
<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>
Au-dessus de cela, j'ai une zone de texte, que je voudrais rechercher dans le tableau en tant que type d'utilisateur. Donc, s'ils Gre
tapent par exemple, la ligne orange du tableau disparaîtrait, laissant la pomme et les raisins. S'ils Green Gr
continuaient et tapaient, la rangée Apple devrait disparaître, ne laissant que des raisins. J'espère que ceci est clair.
Et si l'utilisateur supprime une partie ou la totalité de sa requête de la zone de texte, je souhaite que toutes les lignes qui correspondent maintenant à la requête réapparaissent.
Bien que je sache comment supprimer une ligne de table dans jQuery, j'ai peu d'idée sur la façon de faire la recherche et de supprimer des lignes de manière sélective en fonction de cela. Y a-t-il une solution simple à cela? Ou un plugin?
Si quelqu'un pouvait me diriger dans la bonne direction, ce serait génial.
Je vous remercie.
la source
Réponses:
J'ai créé ces exemples.
Index de recherche simple
Démo : http://jsfiddle.net/7BUmG/2/
Recherche d'expression régulière
Des fonctionnalités plus avancées utilisant des expressions régulières vous permettront de rechercher des mots dans n'importe quel ordre dans la ligne. Cela fonctionnera de la même manière si vous tapez
apple green
ougreen apple
:Démo : http://jsfiddle.net/dfsq/7BUmG/1133/
Rebondir
Lorsque vous implémentez le filtrage de table avec recherche sur plusieurs lignes et colonnes, il est très important de prendre en compte les performances et la vitesse de recherche / l'optimisation. En disant simplement que vous ne devez pas exécuter la fonction de recherche à chaque frappe, ce n'est pas nécessaire. Pour éviter que le filtrage ne s'exécute trop souvent, vous devez le supprimer. L'exemple de code ci-dessus deviendra:
Vous pouvez choisir n'importe quelle implémentation de debounce, par exemple à partir de Lodash _.debounce , ou vous pouvez utiliser quelque chose de très simple comme j'utilise dans les prochaines démos (debounce à partir d' ici ): http://jsfiddle.net/7BUmG/6230/ et http: / /jsfiddle.net/7BUmG/6231/ .
la source
#table
leid
de ma table? Des modifications supplémentaires seraient-elles nécessaires pour travailler avec les balises<thead>
et<tbody>
? J'ai inclus le script et le html du lien jsfiddle, en changeant le#id
, mais je n'obtiens aucun filtrage.<tbody>
vous devez passer àvar $rows = $('#id-of-your-table tbody tr');
.<tr>
DOMElement et la chaîne. De cette façon,keyup()
vous recherchez ces chaînes (ce qui est beaucoup plus rapide) et avez les lignes correspondantes prêtes à être manipulées. Cette première procédure de configuration coûteuse doit ensuite être exécutée une seule fois juste après le chargement. Tous ces changements ne sont que des corrections mineures, la partie centrale réelle reste toujours comme indiqué dans cette réponse. Cette approche est également possible et assez facile à implémenter sans jQuery.$('#table tr:not(:first)')
sélecteur.j'ai un plugin jquery pour cela. Il utilise également jquery-ui. Vous pouvez voir un exemple ici http://jsfiddle.net/tugrulorhan/fd8KB/1/
la source
Voici la meilleure solution pour rechercher à l'intérieur d'un tableau HTML tout en couvrant l' ensemble du tableau , (tous td, tr dans le tableau), en javascript pur et aussi court que possible:
la source
Merci @dfsq pour le code très utile!
J'ai fait quelques ajustements et peut-être d'autres comme eux aussi. J'ai veillé à ce que vous puissiez rechercher plusieurs mots, sans avoir de correspondance stricte.
Exemple de lignes:
Vous pourriez rechercher «ap pe» et il reconnaîtrait la première ligne
Vous pourriez rechercher «pomme de banane» et il reconnaîtrait la deuxième ligne
Démo: http://jsfiddle.net/JeroenSormani/xhpkfwgd/1/
la source
var $rows = $('#WorldPlayersTable tr');
en -var $rows = $('#WorldPlayersTable tbody tr');
J'ai trouvé la réponse de dfsq à ses commentaires extrêmement utiles. J'ai apporté quelques modifications mineures applicables à moi (et je le publie ici, au cas où cela serait d'une certaine utilité pour d'autres).
class
comme crochets, au lieu d'éléments de tabletr
class
tout en montrant / masquant le parent$rows
éléments de texte dans un tableau une seule fois (et en évitant le$rows.length
calcul des temps)la source
Solution Javascript pur:
la source
vous pouvez utiliser du javascript natif comme celui-ci
la source
Le plugin Datatable JS est également une bonne alternative pour intégrer la fonction de recherche pour la table html
https://datatables.net/examples/basic_init/zero_configuration.html
la source
Si vous pouvez séparer le HTML et les données, vous pouvez utiliser des bibliothèques externes comme les tables de données ou celle que j'ai créée. https://github.com/thehitechpanky/js-bootstrap-tables
Cette bibliothèque utilise la fonction keyup pour recharger les données de table et semble donc fonctionner comme la recherche.
la source