javascript - datatables教程 - 如何使用逗号分隔值在Datatables中自定义筛选?



datatables分页 (1)

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

这是我的小提琴

我想允许用户在搜索框中使用“,”(逗号分隔值),并希望处理逗号或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;

})

如果所有行都被过滤出来,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等返回正确的行。

更新小提琴 - > https://jsfiddle.net/1rde0nbm/16/





datatables