在两个不同的DataTable中单独过滤数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在两个不同的DataTable中单独过滤数据相关的知识,希望对你有一定的参考价值。

这是我想要做的:

我在同一页面上有两个DataTable,它们具有不同的数据。一个是'sell_orders',另一个是'buy_orders'。我想根据每个表顶部的复选框分别过滤每个表中的数据。到目前为止,我已经使用以下代码工作了:

$("#sell_vis_cit").change(function() {
    var checked = this.checked;
    var allowFilter = ['sell-orders'];
    if (!checked) {
        $.fn.dataTable.ext.search.push (
            function(settings, data, dataIndex) {
                // check if current table is part of the allow list
                if ( $.inArray( settings.nTable.getAttribute('id'), allowFilter ) == -1 ) {
                   // if not table should be ignored
                   return true;
                }
                return $(sell_table.row(dataIndex).node()).attr('sell-data-sec') != 'x';
            }
        );
        sell_table.draw();
    } else {
        $.fn.dataTable.ext.search.pop();
        sell_table.draw();
    }
});
$("#buy_vis_cit").change(function() {
    var checked = this.checked;
    var allowFilter = ['buy-orders'];
    if (!checked) {
        $.fn.dataTable.ext.search.push (
            function(settings, data, dataIndex) {
                // check if current table is part of the allow list
                if ( $.inArray( settings.nTable.getAttribute('id'), allowFilter ) == -1 ) {
                   // if not table should be ignored
                   return true;
                }
                return $(buy_table.row(dataIndex).node()).attr('buy-data-sec') != 'x';
            }
        );
        buy_table.draw();
    } else {
        $.fn.dataTable.ext.search.pop();
        buy_table.draw();
    }
});

我遇到的问题是什么时候删除过滤器。如果已对每个表应用过滤器,则使用pop()函数删除过滤器将变得不可靠,因为无法验证它是否正在从右表中删除过滤器。

所以我的问题是:有没有办法验证pop()是否在正确的表上运行,就像我使用push()一样?或者,有没有更好的方法来实现我的目标?

答案

为什么push()pop()首先?在我看来,你有一些静态过滤器,可以通过复选框打开和关闭。您可以在全局范围内声明一次过滤器并在过滤器内执行“math”:

$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
  if ((settings.sTableId == 'sell-orders' && $("#sell_vis_cit").is(':checked')) ||
      (settings.sTableId == 'buy-orders' && $("#buy_vis_cit").is(':checked'))) {

     //filter code
  } else {
    return true
  }
})

然后只需激活点击处理程序中的过滤器:

$("#sell_vis_cit, #buy_vis_cit").change(function() {
  buy_table.draw();
  sell_table.draw();
})

以上是关于在两个不同的DataTable中单独过滤数据的主要内容,如果未能解决你的问题,请参考以下文章

c#,datatable中对时间的过滤过滤

在两个日期选择器之间过滤数据表

如何从 jQuery Datatable 中获取过滤后的数据结果集

带有服务器端的数据表自定义过滤

如何为 dataTable 中的不同操作选择图像?

C# Winform DataTable 怎么过滤两列不重复