如何为 DataTables 的重置按钮添加清空筛选功能

本文介绍如何通过一行核心代码实现 datatables 中“清除筛选”按钮的功能,使其同时清空全局搜索框内容和所有下拉列筛选器,确保表格恢复到初始未筛选状态。

在使用 DataTa

bles 构建带级联下拉筛选的表格时,常见的需求是提供一个“Clear Filters”按钮,一键还原所有筛选状态——包括全局搜索文本(search())和各列的独立筛选条件(columns().search())。默认情况下,DataTables 并不自动绑定此类操作,需手动为按钮注册事件并调用对应 API。

关键实现逻辑如下:
当点击 #test 按钮时,执行两步操作:

  1. table.search(''):清空全局搜索输入框的值;
  2. table.columns().search('').draw():遍历所有列,清除每列的自定义搜索条件(如正则匹配 ^value$),然后强制重绘表格。

完整可运行代码如下(已整合原示例逻辑):

$(document).ready(function() {
  var table = $('#example').DataTable({
    responsive: true,
    searching: true
  });

  buildSelect(table);

  table.on('draw', function() {
    buildSelect(table);
  });

  // ✅ 绑定清除筛选按钮
  $('#test').on('click', function() {
    table.search('').columns().search('').draw();
  });
});

function buildSelect(table) {
  var counter = 0;
  table.columns([0, 1, 2]).every(function() {
    var column = table.column(this, { search: 'applied' });
    counter++;
    var select = $('')
      .appendTo($('#dropdown' + counter).empty())
      .on('change', function() {
        var val = $.fn.dataTable.util.escapeRegex($(this).val());
        column
          .search(val ? '^' + val + '$' : '', true, false)
          .draw();
      });

    column.data().unique().sort().each(function(d) {
      select.append('');
    });

    // 恢复当前选中项(保持 UI 与筛选状态同步)
    var currSearch = column.search();
    if (currSearch) {
      var cleanVal = currSearch.replace(/^\^|\$$/g, ''); // 移除 ^ 和 $
      select.val(cleanVal);
    }
  });
}

⚠️ 注意事项:

  • table.columns().search('') 必须配合 .draw() 才生效,否则仅重置内部状态而不刷新视图;
  • 若列筛选使用了正则表达式(如 '^value$'),清除时只需传入空字符串即可,无需手动还原正则结构;
  • buildSelect() 在每次 draw 后被调用,确保下拉菜单始终与当前数据一致,且能正确回显已清除的筛选状态;
  • 如需增强用户体验,可在点击后重置所有
$('#dropdown1, #dropdown2, #dropdown3').find('select').val('');

综上,table.search('').columns().search('').draw() 是清空 DataTables 全局+列级筛选的最简、最可靠方案,适用于绝大多数自定义筛选场景。