【问题标题】:DataTables : search in multiple columns using OR operatorDataTables:使用 OR 运算符在多列中搜索
【发布时间】:2020-07-01 16:03:45
【问题描述】:

我尝试使用相同的值在多列中搜索,默认情况下这些值存在于表中,如果我使用此代码在一列中搜索,它可以正常工作,没有任何问题:

table.column(0).search('blabla\\s*$', true, false).draw()

如果我尝试使用其他值搜索第二列,则可以正常工作:

table.column(1).search('bla\\s*$', true, false).draw()

所以,我尝试使用此代码搜索两列(我在 StackOverflow 和 Officiel DataTable 文档中找到它)

table.columns([0, 1]).search('bla\\s*$', true, false).draw()

但它不起作用,所以,我分析它,我发现datatable搜索使用AND运算符,这意味着'bla'需要存在于两列,但我想使用OR运算符。

我尝试创建我的自定义过滤器,但是除了实现的繁重之外,它还有很多问题,是否有任何解决方案可以在数据表的搜索列上使用 OR 运算符?

【问题讨论】:

    标签: javascript datatable


    【解决方案1】:

    使用$.fn.dataTable.ext.search 的自定义插件,因为它只是一个函数数组,您可以根据需要使用该事实来激活和停用过滤器

    myfilter = function(settings, data, dataIndex) {
    var str1 = data[0]
    var str2 = data[1]
    if (str1.search(/bla\\s*$/g) != -1 || str2.search(/bla\\s*$/g) != -1) {
      return true;
    }
    return false;
    });
    
    $.fn.dataTable.ext.search.push(myfilter)
        
       
    

    删除您只需执行的过滤器

    $.fn.dataTable.ext.search.splice($.fn.dataTable.ext.search.indexOf(myfilter, 1));
    

    【讨论】:

    • 第一个解决方案不起作用,关于自定义过滤器我使用它但它有很多问题,当我需要删除过滤器时它崩溃了(恢复默认表)
    • 你能详细说明你的cmets的最后一部分吗?我没明白
    • 当我添加自定义过滤器时,它在我进行搜索时工作正常,但是当我想删除过滤器时,我无法取回整个表格,有什么解决方案吗?
    • 我已经更新了答案,看看它是否适合你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2017-11-25
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多