【问题标题】:How to do custom filtering in Datatables with comma separated values?如何使用逗号分隔值在 Datatables 中进行自定义过滤?
【发布时间】:2017-11-10 19:21:12
【问题描述】:

我正在使用 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;

})

【问题讨论】:

    标签: javascript jquery html datatables


    【解决方案1】:

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

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

    这也提供了仅在用户点击 enter 时进行过滤的可能性:

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

    然后只返回真 如果 有一个匹配,健全性检查也是一个好主意: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/

    【讨论】:

    • 感冒发烧的家;可能会出现重大错误;)
    • 保重,如果有的话我会处理的;)
    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2010-12-12
    相关资源
    最近更新 更多