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

时间:2017-12-20 19:29:22

标签: datatables

以下是我要做的事情:

我在同一页面上有两个DataTable,它们具有不同的数据。一个是' sell_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()一样?或者,有没有更好的方法来实现我的目标?

1 个答案:

答案 0 :(得分:1)

首先为什么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();
})