web-dev-qa-db-fra.com

jQuery DataTables - Filtrer la colonne par correspondance exacte

Essayer d'afficher uniquement les correspondances exactes avec le terme de recherche entré dans la barre de recherche.

Par exemple, j'ai une barre de recherche qui filtre par ID #. Je souhaite que seuls les enregistrements qui correspondent au nombre exact entré s'affichent.

Donc si 123 est entré, je ne veux pas 12345, 91239, etc etc à afficher. Seulement 123.

J'ai vu quelques informations sur bRegex sur la page FAQ, mais ça ne marche pas pour moi. Des idées?

26
JimmyJammed

Ok a résolu le problème. Cependant, étant donné que la colonne sur laquelle j'utilise la correspondance exacte contient parfois plusieurs ID # séparés par des virgules, je ne pourrai pas utiliser une recherche de correspondance exacte.

Mais pour ceux qui sont intéressés, voici la réponse:

oTable.fnFilter( "^"+TERM+"$", COLUMN , true); //Term, Column #, RegExp Filter
25
JimmyJammed

Cela vous donnera le résultat exact pour une colonne.

 table.column(i)
 .search("^" + $(this).val() + "$", true, false, true)
 .draw();

c'est à dire . recherche (entrée, regex, smart, caseInsen)

38
Neeno Xavier
$(document).ready( function() {
    $('#example').dataTable( {
        "oSearch": {"bSmart": false}
    } );
} )

Essayez d'utiliser l'option bSmart et de la définir sur false

À partir de la documentation

"Lorsque" bSmart "DataTables utilisera ses méthodes de filtrage intelligentes (pour correspondre à Word à tout moment dans les données), si faux, cela ne sera pas fait."

MISE À JOUR

J'ai trouvé ça:

oSettings.aoPreSearchCols[ iCol ].sSearch = "^\\s*"+'1'+"\\s*$";
oSettings.aoPreSearchCols[ iCol ].bRegex = false;
oSettings.aoPreSearchCols[ iCol ].bSmart= false;

à ce lien http://www.datatables.net/forums/discussion/4096/filtering-an-exact-match/p1

il semble que vous pouvez définir bSmart et bRegex par colonne ainsi que spécifier une expression régulière manuelle par colonne.

8
Keith.Abramo

Si vous voulez la correspondance exacte depuis le début, vous pouvez essayer ce code,

    var table = $('#myTable').DataTable()
    $('#filterrow > th:nth-child(2) > input').on( 'keyup change', function () {
        table
        .column( $(this).parent().index()+':visible' )
        .search( "^" + this.value, true, false, true )
        .draw();
    } );
3
Tariq

Vous pouvez utiliser une expression régulière pour une correspondance exacte comme suit:

var table = $('#dt').DataTable();

$('#column3_search').on('keyup', function () {
    // Note: column() accepts zero-based index meaning the index of first column is 0, second column is 1 and so on.
    // We use `2` here as we are accessing 3rd column whose index is 2.
    table.column(2)
         .search("^" + this.value + "$", true, false, true)
         .draw();
});

La syntaxe de la fonction search est:

recherche (entrée, expression rationnelle, recherche_ intelligente, sensible à la casse)

Nous désactivons la recherche intelligente dans ce cas, car la fonction search utilise une expression régulière en interne lorsque la recherche intelligente est défini sur true. Sinon, cela crée un conflit entre notre expression régulière et celle qui est utilisée par la fonction search.

Pour plus d'informations, consultez la documentation suivante de DataTable :

colonne (). recherche ()

J'espère que c'est utile!

1
Wolverine
$(document).ready(function() {
    tbl = $('#example').dataTable();
    tbl.fnFilter("^" + filter_value + "$");
});

filter_value est la chaîne entrée dans le champ de filtre.

0
matino

Les versions actuelles de Datatables prennent en charge l'utilisation d'une correspondance exacte réelle sur une base de colonnes.

table.column(i)
.search($(this).val(), false, false, false)
.draw();

Le documentation explique chaque drapeau.

0
Alejandro Marin