Layui表格怎么实现拖拽行改变数据顺序

冬枫同学_5746

冬枫同学_5746

2026-04-02

939人浏览

原创

layui.table原生不支持拖拽排序,需手动绑定dragstart/dragover/drop事件操作tr元素,结合done回调、preventDefault、clientY与getBoundingClientRect计算插入位置,并在拖拽后按新DOM顺序更新data再reload。

layui table 如何启用拖拽排序功能

原生 layui.table 不支持行拖拽排序,必须手动集成第三方库或自己实现 dom 拖拽逻辑。官方文档里没这个 api,别在 cols 或 init 里找开关参数了。

实际可行路径只有一条:用浏览器原生 dragstart/dragover/drop 事件 + 表格 tbody 的 tr 元素操作,配合 table.reload() 刷新数据顺序。

  • 必须给表格容器加 id(比如 id="demo"),否则 layui.table 实例拿不到对应 DOM
  • table.render() 后不能直接操作 tbody tr——要等 done 回调执行完,DOM 真实渲染完毕再绑定拖拽事件
  • 拖拽时得禁用默认行为(e.preventDefault()),否则 Chrome/Firefox 会触发文件上传提示

拖拽过程中如何准确识别插入位置

靠 dragover 事件的 clientY 和目标 tr 的 getBoundingClientRect().top 对比,判断是插到上方还是下方。别用 index() 或 prev(),它们在重排后容易错位。

  • 每个 tr 绑定 dragover 时,计算鼠标 Y 坐标是否落在该行上半部分 → 插入到它前面;否则插入到它后面
  • 必须给被拖拽的 tr 设置 draggable="true",否则无法触发 dragstart
  • 拖拽源和目标不能是同一行,要用 e.target !== e.dataTransfer.getData('text') 这类方式过滤

数据顺序更新后怎么同步到 layui 表格实例

拖拽只是改了 DOM 顺序,table.config.data 还是老的,不手动更新会导致翻页、搜索、导出都用错数据。

  • 拖拽结束时,遍历当前 tbody tr,按顺序提取每行的 data-index(渲染时 row 数据的原始索引)或你存的唯一 ID 字段
  • 用这个新顺序去重新排列原始数据数组,再调用 table.reload('demo', { data: newArr })
  • 别用 table.cache['demo'] = newArr 直接改缓存——下次 reload 会覆盖它,且分页信息不同步

移动端拖拽为什么失效或卡顿

移动端没有 drag 系列事件,iOS Safari 和安卓 Chrome 都不支持,强行监听等于白写。

  • 必须检测 'ontouchstart' in window,走 touchstart/touchmove/touchend 模拟拖拽逻辑
  • 触摸点坐标要用 e.touches[0].clientY,不是 e.clientY
  • 记得在 touchstart 里加 e.preventDefault(),否则 iOS 会触发页面滚动打断拖拽
  • 性能敏感:不要在 touchmove 里频繁调用 getBoundingClientRect(),缓存一次结果复用

拖拽排序真正麻烦的不是逻辑,而是跨浏览器兼容性细节和数据状态同步时机——DOM 动了,内存里的数组没动,reload 又没传对 data,三者差一点,整个排序就“看起来动了,其实没变”。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2503

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5403

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6430

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6038

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

863

5

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2840

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

360

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2673

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1161

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习