过滤行的分页 - 重置原始数据集 - jQuery数据表

时间:2015-09-21 12:55:45

标签: javascript jquery pagination datatables

这是我对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行。

我在这里缺少什么?在分页时导致原始数据集返回的原因是什么?

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您在使用$.fn.dataTable.ext.afnFiltering.pop()绘制表后立即执行draw(),这会移除您的自定义过滤器,如果表已排序,页面已更改等,则不再应用它。

尝试在$.fn.dataTable.ext.afnFiltering.pop()之前添加$.fn.dataTable.ext.afnFiltering.push(),仅在过滤器更改时删除以前的自定义过滤器,但在添加新过滤器之前。