jQuery DataTables ' ou ' Recherche / filtre

j'utilise des DataTables jQuery (http://www.datatables.net/) pour afficher quelques données tabulaires. Le filtre de recherche est une fonction puissante. Bien que si plusieurs mots-clés sont recherchés dans le tableau, la recherche ne filtre que les données déjà filtrées.

dans l'exemple ici - http://jsfiddle.net/illuminatus/2j0Lz5or/1/

Si les mots clés sont recherchés comme 10 99 il ne donne aucun résultat. Je veux que la recherche affiche tout les résultats / lignes contenant tous les mots clés recherchés ou entrés.

Recherche 10 99 afficherait les lignes 1, 5 et 6.

techniquement, la recherche doit être une recherche "ou".

serais reconnaissant de toute aide.

modifier: La recherche doit être une recherche 'ou'.

10
demandé sur Sameer Joshi 2014-08-19 15:44:48

4 réponses

et-filtrer (inclure les lignes où tous les mots recherchés sont présents). Ce filtre personnalisé remplace le processus de filtrage du builtin. Chaque colonne de chaque ligne est comparée à chaque mot recherché.

$.fn.dataTableExt.afnFiltering.push(
  function(oSettings, aData, iDataIndex) {
      var keywords = $(".dataTables_filter input").val().split(' ');  
      var matches = 0;
      for (var k=0; k<keywords.length; k++) {
          var keyword = keywords[k];
          for (var col=0; col<aData.length; col++) {
              if (aData[col].indexOf(keyword)>-1) {
                  matches++;
                  break;
              }
          }
      }
      return matches == keywords.length;
   }
);

violon à la fourche-> http://jsfiddle.net/9d097s4a/


OR-filtrer (inclure les lignes où au moins un des mots recherchés est présent). C'est une autre approche, surtout un essayer de rationaliser cette réponse ci-dessus. Au lieu de jouer avec oSearch et des termes de recherche codés en dur, l'événement de filtrage par défaut est remplacé par un événement qui tokenise la phrase de recherche et effectue ensuite un. En tant qu'expérience optionnelle, la recherche n'est désormais effectuée que lorsque l'utilisateur clique sur entrée - cela semble un peu plus naturel.

var input = $(".dataTables_filter input");
input.unbind('keyup search input').bind('keypress', function (e) {
    if (e.which == 13) {
       var keywords = input.val().split(' '), filter ='';
       for (var i=0; i<keywords.length; i++) {
           filter = (filter!=='') ? filter+'|'+keywords[i] : keywords[i];
       }            
       dataTable.fnFilter(filter, null, true, false, true, true);
       //                                ^ Treat as regular expression or not
    }
});

voir la démo -> http://jsfiddle.net/2p8sa9ww/

17
répondu davidkonrad 2017-05-23 12:00:32

j'ai obtenu ce travail en utilisant la recherche regEx. J'ai utilisé le regEx suivant pour rechercher dans la table des mots-clés 10 99

^(?=.*?(10|99)).*?

http://jsfiddle.net/illuminatus/2j0Lz5or/6/