唯一可靠方式是初始化时自行保存配置引用,或从DOM反查$('#elem').data('lay-table').config;运行时状态需监听page/sort事件存入变量,DOM操作须在done回调中进行。

怎么在表格外拿到表格的当前渲染配置
不能靠 layui.table.config 直接读,它只存全局默认值,不是你 render 时传进去的那个对象。唯一可靠的方式是:自己留一份配置引用,或者从 DOM 上反查已渲染实例。
常见错误是写 layui.table.config['test'] 发现是 undefined 或内容不对——因为这个对象只有在你调用 table.render({ id: 'test' }) 后才被写入,且只存部分标准化后的字段(比如 url 可能已被拼上分页参数,cols 已转成二维数组)。
- 初始化时就存好:
const myTableConfig = { elem: '#demo', url: '/api/list', id: 'demo' };,然后table.render(myTableConfig) - 已渲染完又没留引用?试试
$('#demo').data('lay-table'),它返回 Layui 内部实例,.config属性可用,但注意字段可能被处理过 - 别用
table.cache['demo'],那是数据,不是配置;也别依赖layui.table.config没写id的表格,它根本不会进这个对象
如何获取当前页码、每页条数、排序字段这些运行时状态
这些值不在初始配置里,也不在 layui.table.config 中,它们随用户操作实时变化,必须监听事件或查缓存对象。
最稳的做法是:在 page、sort、reload 等事件回调里,把关键状态写进一个本地变量,比如 window.demoTableState。
table.on('sort(demo)', obj => { window.demoTableState.sort = { field: obj.field, type: obj.type } })table.on('page(demo)', function(obj) { window.demoTableState.page = { curr: obj.curr, limit: obj.limit } })- 注意:分页后
table.cache['demo']才更新,所以curr和limit要在page事件里同步,不能只靠cache读
怎么在表格外拿到已渲染的 DOM 节点和行数据
渲染完成前查不到 很多人在 它只返回「当前页中被勾选的行」,跟“已加载”或“已渲染”完全无关。服务端分页下,它最多返回当前页那十几条;前端分页下,也只返回当前页勾选的,不会跨页聚合。 真要全量 ID,必须自己管理数据源缓存,而不是依赖这个 API。
列宽、显隐、拖拽顺序这些 UI 状态,Layui 不提供 API 读取,只能手动扒 DOM。这点最容易被忽略——你以为配置还在,其实用户拖过列、隐藏过列,UI 状态早就和原始 和 ,必须等 done 回调或 rendered 事件触发后才能安全操作。table.render() 调用后立刻写 $('#demo tbody tr').length,结果是 0——不是失败,是时机太早。
done 回调里用原生查:document.querySelector('#demo table') 或 document.querySelectorAll('#demo tbody tr')
skin: 'line' 或自定义结构,DOM 多了一层 .layui-table-box,得写成 document.querySelector('#demo .layui-table tbody')
$('#demo').find('tbody tr') 预查,DOM 还没挂载为什么
table.checkStatus('demo') 拿不到全部已加载数据的 ID
done 回调里把 res.data.map(d => d.id) 存到变量,每次 reload 都要重新覆盖id,可能是 user_id 或嵌套的 row.info.pk,先打印 tableIns.getData()[0] 确认结构tableIns.getData() 返回的是当前已渲染行的数据数组,不是 DOM 节点,更不是 ID 列表——提取 ID 得自己 .map()
cols 对不上了。











