如何使用逗号分隔值在数据表中进行自定义过滤?

时间:2017-11-09 11:29:15

标签: javascript jquery html datatables

我正在使用Datatables在我的JSP页面中显示表数据。我在我的数据表中启用了搜索功能。

这是我的fiddle

我想允许用户使用"," (逗号分隔值)在搜索框中,并希望处理逗号或OR。我试图实现它但是只要我进入","事情不起作用。我应该做些什么改变才能实现所需的功能

$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {

   var search = $('.dataTables_filter input').val().toLowerCase();
   var inputArray=search.split(",");

   var node = table.cell({ column: 0, row: dataIndex }).nodes().to$();

   var text = node.find('b').text();
   text += node.find('[name$=locationId] option:selected').text()
   text += node.find('[name$=empRole] option:selected').text();


   for(var i=0;i<inputArray.length;i++){
   return text.toLowerCase().indexOf(inputArray[i])>-1;
   }

return false;

})

1 个答案:

答案 0 :(得分:1)

如果所有行都被过滤掉(可能还有其他原因),DataTable似乎停止在内部调用search()。我可以通过转动off()所有绑定并以编程方式触发过滤器来实现该功能;如果您有自定义过滤器,则可以draw()调用它:

initComplete: function() {
  $('.dataTables_filter input').off().on('keyup', function(e) {
    table.draw()
  })
}

这也可以在用户点击 时过滤:

if (e.which == 13) table.draw()

然后只返回true 如果匹配,并且健全性检查也是一个好主意:obama,将在数组中提供两个索引,并且所有内容都匹配一个空字符串:

$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
   var search = $('.dataTables_filter input').val().toLowerCase().split(',');
   var node = table.cell({ column: 0, row: dataIndex }).nodes().to$();

   var text = node.find('b').text();
   text += node.find('[name$=locationId] option:selected').text()
   text += node.find('[name$=empRole] option:selected').text();
     text = text.toLowerCase();

   for (var i=0, l=search.length; i<l; i++) {
     if (search[i].trim() != '' && text.indexOf(search[i]) >-1) return true
   }
   return false;
})

不确定这是否是最明亮的解决方案;或者如果它在您的现实生活场景中按预期工作,但至少它返回obama,obama, trumptrump, obamaobama, test等正确的行。

更新小提琴 - &gt;的 https://jsfiddle.net/1rde0nbm/16/