嗨,我正在使用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,但是我需要根据需要对其进行修改。

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

最佳答案

如果认为您最好使用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()
})


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



好。我意识到问题不在于精确匹配过滤器中的“精确单词”,而是整个单词搜索。我们在搜索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从以下注释中拨弄了小提琴-> http://jsfiddle.net/hmjnqjbs/3/

现在activevaio等可以正常工作。

10-02 15:25