直接用 json.stringify(obj.data) 序列化事件回调中的 data 对象;手动获取某行用 table.cache'test';导出全量数据须用初始化时的原始数组而非 table.cache。

layui table 的行数据怎么转成 JSON 字符串?
直接用 JSON.stringify() 就行,但得先拿到原始数据对象——不是 DOM 元素,也不是渲染后的 tr 节点,而是你传给 table.render() 的原始数据项或通过 API 获取的行数据。
用 table.on('row') 或 table.on('tool') 拿到的数据已经是对象
点击行或工具栏按钮时,事件回调的 data 参数就是该行对应的完整数据对象(即你原始数据数组里的那一项),可直接序列化:
table.on('row(test)', function(obj){
console.log(JSON.stringify(obj.data)); // ✅ 正确:obj.data 是原始 JS 对象
});
常见错误是去取 obj.tr 然后试图 JSON.stringify(obj.tr)——这会得到一个 DOM 元素对象,序列化结果是空对象 {} 或报错。
手动获取某一行数据(比如通过索引)要用 table.cache
如果你没在事件里,而是想按行号、ID 或其他条件查某行数据,不能靠 DOM 查找,得查缓存:
-
table.cache['test']是表格 ID 为test的当前全量数据数组(含分页后当前页的数据) - 如果要取第 3 行(索引为 2):
JSON.stringify(table.cache['test'][2]) - 注意:这个数组不包含被
filter掉或未加载进当前页的数据;如需全量原始数据,请保留你初始化时传入的原始数组(例如var originData = [...])
导出整张表数据为 JSON 字符串?别用 table.cache 做唯一来源
如果目标是“把用户看到的整页表格”序列化,table.cache['test'] 够用;但如果要导出全部数据(不分页),必须用你最初传给 table.render() 的那个原始数据源,或者调用后端接口重新拉全量数据。
原因:table.cache 只缓存当前页,且可能已被前端排序、筛选修改过,和原始数据不一致。例如:
// 错误:以为 cache 就是全量
fs.writeFileSync('all.json', JSON.stringify(table.cache['test']));
// 正确:用你一开始定义好的数据变量
var fullData = [
{id: 1, name: '张三'},
{id: 2, name: '李四'}
];
console.log(JSON.stringify(fullData));
容易被忽略的是:表格启用了 url + page: true 时,table.cache 里只有当前页数据,且没有自动合并多页的能力。










