数据表精确的单词搜索

时间:2016-02-04 17:12:32

标签: jquery regex datatable

您好我使用datatables,我想用一个确切的词来过滤我的数据。

我的表数据如下所示;

+-----+----------+
| num | status   |
+-----+----------+
| 1   | Active   |
+-----+----------+
| 2   | Inactive |
+-----+----------+
| 3   | Active   |
+-----+----------+

每当我搜索Active时,我也会看到所有Inactive。有没有办法过滤这个,以便状态列只显示确切的单词。

我的JS在下面;

$(document).ready(function() {
    var table = $('#items').DataTable( {
    select: true,
    responsive: true
    } );
} );

我一直在阅读API,但我无法理解它。也许我需要写一些正则表达式?

有一个例子(我认为)here,但我需要根据自己的需要对其进行修改。

任何帮助或建议都将不胜感激。

3 个答案:

答案 0 :(得分:2)

如果认为自己最好使用custom filter执行此任务。 unbind默认处理程序,每次都执行完全匹配过滤器。如果你有一张桌子

var table = $('#example').DataTable()  

然后以这种方式使用完全匹配自定义过滤器

$('.dataTables_filter input').unbind().bind('keyup', function() {
   var searchTerm = this.value.toLowerCase()
   if (!searchTerm) {
      table.draw()
      return
   }
   $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
      for (var i=0;i<data.length;i++) {
         if (data[i].toLowerCase() == searchTerm) return true
      }
      return false
   })
   table.draw();   
   $.fn.dataTable.ext.search.pop()
})

这是一个演示 - &gt; http://jsfiddle.net/hmjnqjbs/1/ 尝试搜索tokyo

行。我意识到问题不在于&#34;确切的词语&#34;在精确匹配过滤器中,但更多的是整个单词搜索。我们希望在Vaio Q900上搜索时看到vaio,但我们不希望看到VaioQ900,因为Vaio这里不是一个完整的词。通过使用正则表达式单词边界\b

可以简单地解决此问题
$('.dataTables_filter input').unbind().bind('keyup', function() {
   var searchTerm = this.value.toLowerCase(),
       regex = '\\b' + searchTerm + '\\b';
   table.rows().search(regex, true, false).draw();
})
来自以下评论的OP小提琴 - &gt;的 http://jsfiddle.net/hmjnqjbs/3/

现在activevaio等按预期工作。

答案 1 :(得分:0)

希望这会有所帮助。在两端添加'\\b'将使表格仅搜索整个单词。

var regex = '\\b' + searchKey + '\\b';
<yourDataTable>.columns(<columnIndex>).search( regex, true, false).draw();

答案 2 :(得分:0)

通过完全匹配过滤搜索结果的方法-

table.column(index).search("^" + searchText + "$", true, false).draw();

更多信息-https://stackoverflow.com/a/19114759/698127