table.checkstatus('yourtableid').data是唯一可靠方式,它天然返回当前页已勾选行的完整数据(仅含cols显式定义字段),严格匹配用户所见;其他dom或indexof方案因分页、筛选、深拷贝等必然失效。

直接调用 table.checkStatus('yourTableId').data,这是唯一可靠方式;其他任何基于 DOM 查询、indexOf 反查或依赖 lay-index 的做法,在分页、筛选、重载后都会失效。
为什么不能用 data.indexOf(row) 或遍历 DOM 找 index?
表格数据可能被过滤、排序、分页,data 数组和当前页面显示的行已不是一一对应;你拿到的选中行对象是深拷贝副本,和原始数组里对象引用不同,indexOf 必然返回 -1。DOM 行顺序还可能因 templet 或 toolbar 渲染而错位,tr 的位置索引不等于数据逻辑序号。
table.checkStatus() 返回的数据字段不全怎么办?
layui 默认只返回 cols 中显式定义的字段,哪怕原始数据有 extra_info、remark 等字段也不会带出来。
- 在列配置中补全字段,哪怕设为
{field: 'extra_info', hide: true} - 需要完整原始数据时,用
row.id查缓存:table.cache['yourTableId'][row.id] - 如果后端没返回
id,必须在parseData里手动补:res.data.forEach((item, i) => item.id = item.id || 'temp_' + i)
分页下如何确保拿到的是“当前页”选中数据?
table.checkStatus() 天然只返回当前页已勾选的行,这是设计行为,不是缺陷——它和用户此刻看到的界面完全一致。
- 确保
table.render()时传了正确的id,且checkStatus调用时参数严格匹配 - 别在
render()后立刻调用,等done回调或按钮点击事件中再取 - 如果用了
table.reload(),之前所有选中状态都会清空,需手动恢复(比如把上次存的id集合传进where并在done里调setRowChecked)
真正容易被忽略的是:checkbox 列必须显式配置 {type: 'checkbox'},且表格初始化完成后再调用 checkStatus;很多人卡在这两步,却去查 DOM 或改源码,反而绕远路。











