javascript - 筛选行分页 — 重置原始数据集 — jQuery Datatables

标签 javascript jquery pagination datatables

这是我在使用 jQuery Datatables 时遇到的一个问题,我真的不知道为什么会发生这种情况!

我有多个选择元素,它们都过滤原始数据集。我对选择更改事件执行过滤逻辑。

这是我的数据表初始化(使用状态保存,来自文档):

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 行。

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

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

最佳答案

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

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

关于javascript - 筛选行分页 — 重置原始数据集 — jQuery Datatables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695801/

相关文章:

javascript - 如何浏览 JSON 节点结构

asp.net-mvc - 添加分页 MVC 和 Azure 表存储

javascript - 如何测试坐标是否在菱形区域?

javascript - 如何使用 AJAX 将查询的值传递到输入字段

jQuery - 按符号分割字符串并获取最后一部分

jquery - 光滑的网格将分页中的所有行分组

php - 在分页中突出显示当前页面?

java - Spring Boot 分页 - Mockito 存储库 findAll(Pageable) 返回 null

javascript - 重新加载页面以添加内容

javascript - Angular UI Bootstrap 模态表单范围 "undefined"