在两个不同的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中单独过滤数据的主要内容,如果未能解决你的问题,请参考以下文章