新闻中心

html5表格怎么整体移动_HTML5表格拖拽排序实现

2025-10-25
浏览次数:
返回列表
实现HTML5表格拖拽排序需设置tr的draggable属性并监听drag事件。首先为tr添加draggable="true",在dragstart时记录源行并设置数据,在dragover时阻止默认行为,在drop时交换行内容并重新绑定事件。示例代码包含完整的事件处理和样式高亮,适用于简单场景。可通过存储索引、增加动画或使用SortableJS优化体验,框架项目应同步数据层。原生API轻量但功能有限,适合基础需求。

html5表格怎么整体移动_html5表格拖拽排序实现

实现HTML5表格的拖拽排序,可以通过原生的HTML5拖放API(Drag and Drop API)来完成。这种方式不需要额外的J*aScript库,适合简单的表格行拖拽排序需求。

启用表格行拖拽的基本原理

要让表格支持行的拖拽排序,需要为表格的每一行(tr)设置可拖拽属性,并监听相关的拖拽事件:

  • tr 添加 draggable="true" 属性,使其可拖动
  • 监听 dragstart:记录被拖动的行
  • 监听 dragover:阻止默认行为以允许放置
  • 监听 drop:执行行的移动操作

实现步骤与代码示例

以下是一个完整的可运行示例:

小爱开放平台 小爱开放平台

小米旗下小爱开放平台

小爱开放平台 291 查看详情 小爱开放平台
<table id="sortableTable" border="1">
  <tr draggable="true"><td>第1行</td></tr>
  <tr draggable="true"><td>第2行</td></tr>
  <tr draggable="true"><td>第3行</td></tr>
</table>

<script>
const table = document.getElementById('sortableTable');
let dragSrcRow = null;

// 开始拖动
function handleDragStart(e) {
  dragSrcRow = this;
  e.dataTransfer.effectAllowed = 'move';
  e.dataTransfer.setData('text/html', this.innerHTML);
  this.style.opacity = '0.4';
}

// 拖动过程中
function handleDragOver(e) {
  if (e.preventDefault) {
    e.preventDefault();
  }
  e.dataTransfer.dropEffect = 'move';
  return false;
}

// 进入目标行时高亮提示
function handleDragEnter() {
  this.classList.add('drag-over');
}

// 离开目标行时移除高亮
function handleDragLe*e() {
  this.classList.remove('drag-over');
}

// 释放拖动
function handleDrop(e) {
  if (e.stopPropagation) {
    e.stopPropagation(); // 防止事件冒泡
  }

  // 避免自己拖到自己
  if (dragSrcRow !== this) {
    // 交换内容
    dragSrcRow.innerHTML = this.innerHTML;
    this.innerHTML = e.dataTransfer.getData('text/html');

    // 可选:重新绑定事件(如果内容结构复杂)
    initDragEvents();
  }

  return false;
}

// 初始化每行的拖拽事件
function initDragEvents() {
  const rows = table.querySelectorAll('tr');
  rows.forEach(row => {
    row.addEventListener('dragstart', handleDragStart, false);
    row.addEventListener('dragover', handleDragOver, false);
    row.addEventListener('dragenter', handleDragEnter, false);
    row.addEventListener('dragle*e', handleDragLe*e, false);
    row.addEventListener('drop', handleDrop, false);
  });
}

// 页面加载后初始化
initDragEvents();
</script>

<style>
.drag-over {
  background-color: #f0f8ff;
}
</style>

增强功能建议

在实际项目中,可以考虑以下优化:

  • 使用 DataTransfer 存储行索引而非 innerHTML,避免结构丢失
  • 添加动画效果提升用户体验
  • 兼容移动端时,可引入第三方库如 SortableJS,它支持触摸拖拽且兼容性更好
  • 若表格数据由框架(如Vue/React)驱动,应在数据层同步更新顺序,再刷新视图
基本上就这些。原生方式简单直接,适合轻量级场景。

以上就是html5表格怎么整体移动_HTML5表格拖拽排序实现的详细内容,更多请关注其它相关文章!


# 是一个  # 科普类食品网站推广文案  # 上海网站排名优化开发  # 南通专业的网站建设价格  # 云南seo教程必选  # 推广数字营销招商方案  # 承德网站建设案例  # 胶州网站建设费用价格表  # seo黑帽大伽  # 漳州网站建设排行  # 平潭网络推广营销咋样啊  # 可以通过  # 相关文章  # 适用于  # 与传统  # 不需要  # html5  # 绑定  # 小爱  # 拖动  # 拖拽  # 拖拽排序  # ssl  # 事件冒泡  # go  # js  # html  # java  # javascript  # react  # vue 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 微信客户端如何收红包_微信客户端接收红包使用教程  fishbowl官网免费版 fishbowl养鱼网站入口  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE  谷歌google账号怎么注册账号 谷歌账号注册官方流程  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  快手极速版在线观看 官方网页版登录地址  微信群消息显示延迟如何解决 微信群消息刷新优化方法  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  蛙漫安全无毒 官方认证的绿色入口  AO3最新官网入口公告_2025AO3镜像站实时查询方法  必由学官网入口 必由学教师登录入口  Go RPC HTTP服务正确实现与常见陷阱解析  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  Steam官网入口直达 Steam注册及登录步骤  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  yy漫画网页版官方入口_yy漫画官网登录页面链接  Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略  快手官方唯一登录入口 谨防山寨钓鱼网站  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  R星幕后开发视频泄露 包含《GTA6》等多款大作  海棠账号登录入口_登录海棠账户同步阅读记录  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略  文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  12306几点到几点不能订票? | 官方最新系统维护时间全解析  Lar*el DB::listen 事件中的查询执行时间单位解析  必由学在线入口 必由学网页版快速登录入口  如何有效阻止外部脚本意外修改内联样式的高度属性  解决Python logging 中 datefmt 导致时间戳固定不变的问题  汽车之家官方网站官网入口_汽车之家网页版直接进入  b站怎么取消点赞_b站点赞取消操作方法  如何使 Jest 模拟函数默认抛出错误以提高测试效率  C++如何实现单例模式_C++设计模式之线程安全的单例写法  163邮箱注册官网 免费申请163个人邮箱  离线运行Go语言之旅:本地部署与GOPATH配置指南  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  React Router v6 教程:构建认证保护的私有路由与重定向策略  机器学习中对数变换预测结果的反向还原 

搜索