jQuery DataTables'OR'搜索/过滤

Sam*_*shi 12 search jquery datatables jquery-datatables

我正在使用jQuery DataTables(http://www.datatables.net/)来显示一些表格数据.搜索/过滤器是一个强大的功能.虽然如果在表格中搜索多个关键字,搜索仅过滤已过滤的数据.

比如这里的例子 - http://jsfiddle.net/illuminatus/2j0Lz5or/1/

如果搜索关键字10 99,则不会产生任何结果.我希望搜索显示包含搜索或输入的所有关键字的所有结果/行.

搜索10 99将显示第1,5和6行.

从技术上讲,搜索应该是"搜索".

非常感谢任何帮助.

编辑:搜索应该是'或'搜索.

dav*_*rad 18

AND -filter(包括存在所有搜索词的行).此自定义筛选器会覆盖内置筛选过程.将每行中的每列与每个搜索词进行比较.

$.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;
   }
);
Run Code Online (Sandbox Code Playgroud)

分叉小提琴 - > http://jsfiddle.net/9d097s4a/


OR -filter(包括至少存在一个搜索词的行).这是另一种方法,主要是试图简化上述答案.而不是摆弄oSearch和硬编码的搜索词,默认过滤事件被替换的标记化搜索短语,然后进行高级的事件fnFilter().作为可选实验,搜索现在仅在用户点击时执行enter- 感觉更自然.

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
    }
});
Run Code Online (Sandbox Code Playgroud)

看演示 - > http://jsfiddle.net/2p8sa9ww/

  • 嘿@SameerJoshi,好吧 - 如果你希望在10 99返回行1,5和6,那么它不是你想要执行的AND搜索,而是OR搜索?没有行匹配10和99. (2认同)

小智 7

更新数据表 1.10

//在新位置搜索字段

Table = $('#your_datatable').DataTable();
$('#your_input_text_field').keyup(function () {
    Table.search($(this).val()).draw();
})

////OR search (enabling regular expression search)
var input = $('#your_input_text_field');
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];
        }
        //true (param 2) turns regex on, false (param 3) turns smart search off
        Table.search(filter, true, false).draw();
    }
});
Run Code Online (Sandbox Code Playgroud)