合并来自不同列的搜索条件

时间:2016-10-21 01:49:30

标签: datatables

我有一个包含3列的数据表和一个搜索框。

搜索框中的任何关键字都应与第1,2或3列的开头匹配。

示例:

鉴于关键字" apple",这三行将匹配:

" Apple 馅饼" - "甜点" - "手工制作"

"新梨甜点" - "甜点" - " apple 树"

"新的苹果甜点" - " 苹果甜点" - "手工制作"

此行不匹配:

"老苹果甜点" - "甜点" - "手工制作的苹果产品"

代码:

对于3列开头的完全匹配:

searchBox.on('keyup', $.proxy(function (e) {
    // how to merge the search result?
    this._table.column(0).search('^' + searchBox.val(), true,
 false).draw();
    this._table.column(1).search('^' + searchBox.val(), true,
 false).draw();
    this._table.column(2).search('^' + searchBox.val(), true,
 false).draw();
}, this));

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

根据Datatable,我们需要一个自定义过滤器来实现多列的OR条件:https://datatables.net/forums/discussion/11728/filtering-datatable-columns-using-or-logic

$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
      var keyword = searchBox.val();
      keyword = keyword.toUpperCase();
      var productDesc = data[1].toUpperCase();
      var productExch = data[3].toUpperCase();
      var productSymbol = data[5].toUpperCase();
      if (productDesc.startsWith(keyword) || productExch.startsWith(keyword) || productSymbol.startsWith(keyword)) {
        return true;
      }
      return false;
    });

    searchBox.on('keyup', $.proxy(function (e) {
      this._table.draw();  //       this._table.search(searchBox.val()).draw();
    }, this));