以下是我要做的事情:
我在同一页面上有两个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()一样?或者,有没有更好的方法来实现我的目标?
答案 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();
})