You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将jQuery Datatable的全部分页记录转换为JSON格式

问题原因

你当前的代码是直接读取页面DOM中的<tbody>行元素,而jQuery Datatable开启分页时,仅会把当前页的行渲染到DOM树中,非当前页的行数据仅存储在Datatable的内部缓存里,所以只能拿到单页的10条记录。

解决方法

方案1:直接调用Datatable原生API(最推荐,性能最高)

Datatable本身提供了获取全量数据的API,不需要自行遍历DOM处理表头和行数据,代码如下:

// 获取Datatable实例,如果你初始化时已经定义了实例变量可以直接使用
var dataTable = $('#list').DataTable();
// 指定page: 'all'参数获取所有分页的全量数据
var allRecords = dataTable.rows({ page: 'all' }).data().toArray();
// 转换为JSON字符串
var jsonResult = JSON.stringify(allRecords);
console.log('全量数据JSON:', jsonResult);

方案2:兼容原有逻辑的改造方法

如果你需要保留原有自定义处理表头、单元格内容的逻辑,可以只修改获取行的部分,通过Datatable API拿到所有页的行节点再处理:

function tableToJSON(tblObj){  
   var data = [];
   var $headers = $(tblObj).find("th");
   // 改动:通过Datatable API获取全量行节点,替代直接读取DOM的tbody tr
   var dtInstance = $(tblObj).DataTable();
   var $rows = $(dtInstance.rows({page: 'all'}).nodes());

   $rows.each(function(index) {
      $cells = $(this).find("td");
      data[index] = {};
      $cells.each(function(cellIndex) {
        data[index][$($headers[cellIndex]).html()] = $(this).html();
      });    
   });
  return data;
}

var myData = tableToJSON($("#list"));
console.log('2>>> ' + JSON.stringify(myData));

注意:两种方案均需要在Datatable初始化完成后执行,才能正确拿到全量数据。

内容的提问来源于stack exchange,提问作者Waseem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:48:03