Layui数据表格行拖拽排序实现方法
Layui表格原生无行拖拽排序,需操作table cache数组或使用Sortable js在done回调初始化。核心是DOM、缓存和服务端三层状态对齐,否则刷新后数据回滚。
Layui 官方提供的 table 组件默认并不支持行的拖拽排序功能。网络上有些教程中提到的 rowDrag: true 配置项,实际上是第三方扩展插件(例如 soulTable)所具备的特性,与 Layui 自身的核心模块并不相关。如果在 table.render() 中直接写入 rowDrag: true,该配置将不会产生任何实际效果,属于无效操作,白白浪费精力。

为什么原生 table 拖拽后顺序会回滚
这是最常见的陷阱:你费尽心思地修改了 tbody 中 tr 的 DOM 顺序,却没有同步更新 table.cache['yourId'] 里的数组。Layui 的所有渲染、分页、导出、筛选等操作都依赖这个缓存数据——缓存不变,调用 reload 就会还原;用户拖拽后一旦刷新页面,数据立即恢复原始顺序。说白了,拖了半天等于没拖。
table.cache是 Layui 内部唯一可信的数据源,必须手动通过Array.splice()重新调整数组顺序- 如果使用了服务端分页(配置了
url),table.cache只存储当前页数据,跨页拖拽会直接失效,此时需要先用table.getData()获取全量数据再操作 - 切勿在
drop事件中执行table.reload("id", { data: [...] }),这会覆盖整个缓存,相当于把你刚做好的调整全部清空
用原生 drag API 实现的关键步骤
不引入第三方库也能实现,但浏览器行为差异与移动端兼容性是比较大的挑战,需要格外谨慎:
- 为每一行
添加 draggable="true",并在dragstart事件中调用e.dataTransfer.setData('text', '')来触发后续事件(Chrome 和 Firefox 必须这样写,否则拖拽无法启动)- 在
dragover和drop事件中务必执行e.preventDefault(),否则默认的链接跳转或页面滚动会拦截你的拖拽逻辑- 插入位置的判断不要使用
$(e.target).index(),因为 DOM 重排后索引会偏移;正确做法是利用e.clientY加上targetTr.getBoundingClientRect().top来计算相对位置- 移动端基本不触发
dragstart,手指滑动会直接触发页面滚动。需要单独检测'ontouchstart' in window,然后改用touchstart/touchmove/touchend配合CSS transform来模拟拖拽效果用 Sortable.js 的注意事项
使用 Sortable.js 比原生方案更稳定,但它与 Layui 表格的 DOM 结构存在耦合风险,有几个细节需要特别注意:
- 必须在
table.render()的done回调中初始化 Sortable,确保tbody已经真实渲染完成。传入的参数必须是原生 DOM 元素tbody[0],不能是 jQuery 对象 - 在
onEnd回调中利用evt.oldIndex和evt.newIndex操作table.cache['id']数组,调整顺序后再调用table.renderData('id')或table.reloadData('id')重新渲染 - 加上
filter: '.layui-table-empty',否则空数据提示行可能会被误拖,导致索引错乱 - 禁用
ghostClass和chosenClass,因为 Layui 表格重绘时容易与这些样式产生冲突,引发视觉错位
说实话,真正棘手的从来不是拖拽动画怎么写,而是 DOM、
来源:https://www.php.cn/faq/2782943.htmltable.cache、服务端存储这三层状态的对齐时机。哪怕只漏掉一次缓存更新,用户就会觉得“拖了等于没拖”,体验瞬间崩塌。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
更多
同类文章
JavaScript中await Promise微任务调度细节
在JavaScript中,`await`将后续代码包装为微任务并入队。若`Promise`已敲定,立即入队;否则挂起函数等待状态变更。微任务在当前宏任务结束前入队,但执行需等宏任务完成。`await`与` then`遵循先进先出,不阻塞事件循环,且优先级低于宏任务。
时间:2026-07-15 18:56
HTML实现模块化异步组件的开发方法
HTML模块化依赖脚本管理,通过获取和文档片段异步加载可避免多次重排。Web组件实现样式隔离需注意标签名带短横线、构造函数中调用父类构造函数等规则。开发必须使用本地服务器,避免跨域资源访问错误。
时间:2026-07-15 18:56
如何利用HTML模板实现组件内容动态占位的方法
浏览器原生slot必须配合attachShadow和自定义元素注册才能生效,且只匹配直接子节点;具名插槽的name属性需严格字符串匹配;提取{{}}占位符应使用matchAll配合正确正则,注意添加g标志并处理点号路径。
时间:2026-07-15 18:56
JavaScript中Null类型的使用要点
JavaScript中null是开发者主动赋值的原始值,表达“预期为空”的明确意图,与自动产生的undefined语义不同。正确使用null可提升代码可读性和类型安全,判断时用严格相等,避免模糊逻辑。结合TypeScript的strictNullChecks和可选链可更好管理空值。
时间:2026-07-15 18:55
Layui表格根据单元格内容动态改变字体颜色
基于Layui表格动态设置文字颜色,最稳定方式是在列配置中使用cellStyle函数。该函数接收params参数,依据数据条件返回合法的CSS样式对象,需提前做空值校验。避免在templet内联style或直接操作DOM,否则易被覆盖或丢失。
时间:2026-07-15 18:55更多
热门专题
- 热门数据榜
更多
相关攻略
JavaScript中await Promise微任务调度细节
2026-07-15 18:56
HTML实现模块化异步组件的开发方法
2026-07-15 18:56
如何利用HTML模板实现组件内容动态占位的方法
2026-07-15 18:56
JavaScript中Null类型的使用要点
2026-07-15 18:55
Layui表格根据单元格内容动态改变字体颜色
2026-07-15 18:55
政务网站可访问性建设中语义化HTML的应用
2026-07-15 18:55
使用SCSS递归函数生成阶梯式延迟CSS加载动画
2026-07-15 18:55
调用栈追踪与性能分析解决JS性能瓶颈
2026-07-15 18:55
更多
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
鸣潮露帕配队攻略与阵容推荐 发布于 2026-07-15
刺客信条黑旗记忆重置以眼还眼成就达成攻略 发布于 2026-07-15
幻兽帕鲁1.0正式版散射光束枪获取方法指南 发布于 2026-07-15
宗师之上非人哉联动官宣夏日狂欢即将开启 发布于 2026-07-15
光遇账号购买必看安全可靠交易平台推荐 发布于 2026-07-15
卖号安全指南:如何挑选靠谱平台规避风险 发布于 2026-07-15
龙族最后的旅行开服时间一览 发布于 2026-07-15
崩坏星穹铁道买号避坑指南 安全交易与靠谱平台推荐 发布于 2026-07-15
Win11如何隐藏桌面图标蓝色双箭头压缩标识 发布于 2026-07-15
统信UOS安装Photoshop替代软件方法 发布于 2026-07-15
Win10开启卓越性能模式提升系统流畅度 发布于 2026-07-15
Win10桌面文件夹路径从D盘改回C盘默认路径方法 发布于 2026-07-15
最建议买的三款油烟机中吸力最强推荐 发布于 2026-07-15
飞利浦液晶电视连接机顶盒选哪个输入源 发布于 2026-07-15
小米手机换机时连接云端的数据迁移方法 发布于 2026-07-15
OPPO应用商店更新入口在哪里 发布于 2026-07-15 - 在

