这是我对jQuery Datatables的一个问题,我真的不知道它为什么会发生这种情况!
我有多个选择元素,它们都会过滤原始数据集。我在选择更改事件上执行过滤逻辑。
这是我的Datatables init(使用状态保存,来自文档):
var table = $('#orders-listing').DataTable({
bStateSave: true,
bFilter:true,
paging: true,
bPaginate:true,
language: { url: /* Language File URL */ },
fnStateSave: function(oSettings, oData){
localStorage.setItem('DataTables_'+window.location.pathname, JSON.stringify(oData));
},
fnStateLoad: function(oSettings){
return JSON.parse(localStorage.getItem('DataTables_'+window.location.pathname));
}
});
这是我在选择更改事件上的过滤逻辑:
$('.filter-select').on('change', function() {
$.fn.dataTable.ext.afnFiltering.push(
function(settings, data, dataIndex) {
// Some logic, return a boolean, wether we keep the row being processed or not.
}
);
table.draw();
$.fn.dataTable.ext.afnFiltering.pop();
});
现在,过滤效果很好。行,分页链接,一切都相应地改变。 但是,一旦我点击分页链接上的第二个链接,原始数据集就会返回。
示例:我首先有200行,过滤后,它减少到150(所以50行被过滤,并从原始数据集中删除),然后我点击了分页上的第二个链接,原始数据集返回,前200行。
我在这里缺少什么?在分页时导致原始数据集返回的原因是什么?
非常感谢任何帮助。感谢。
答案 0 :(得分:0)
您在使用$.fn.dataTable.ext.afnFiltering.pop()
绘制表后立即执行draw()
,这会移除您的自定义过滤器,如果表已排序,页面已更改等,则不再应用它。
尝试在$.fn.dataTable.ext.afnFiltering.pop()
之前添加$.fn.dataTable.ext.afnFiltering.push()
,仅在过滤器更改时删除以前的自定义过滤器,但在添加新过滤器之前。