js 原生表格拖拽排序

时间: 2023-08-12 08:03:57 浏览: 52
要实现表格的拖拽排序,需要以下几个步骤: 1. 给表格中需要排序的行添加可拖拽属性 `draggable="true"`。 2. 监听拖拽事件 `dragstart`,并将拖拽的行的索引存储到数据属性中。 3. 监听目标放置事件 `drop`,并根据拖拽行的索引和目标行的索引交换两行的位置。 4. 阻止默认的拖拽行为 `dragover` 和 `drop` 事件。 下面是一个简单的实现示例: HTML 代码: ``` <table> <thead> <tr> <th>#</th> <th>Name</th> <th>Age</th> </tr> </thead> <tbody> <tr draggable="true" data-index="0"> <td>1</td> <td>Alice</td> <td>25</td> </tr> <tr draggable="true" data-index="1"> <td>2</td> <td>Bob</td> <td>30</td> </tr> <tr draggable="true" data-index="2"> <td>3</td> <td>Charlie</td> <td>20</td> </tr> </tbody> </table> ``` JavaScript 代码: ``` const table = document.querySelector('table'); const tbody = table.querySelector('tbody'); let dragIndex; tbody.addEventListener('dragstart', e => { dragIndex = e.target.dataset.index; }); tbody.addEventListener('dragover', e => { e.preventDefault(); }); tbody.addEventListener('drop', e => { e.preventDefault(); const dropIndex = e.target.parentElement.dataset.index; if (dragIndex !== dropIndex) { const dragRow = tbody.querySelector(`[data-index="${dragIndex}"]`); const dropRow = tbody.querySelector(`[data-index="${dropIndex}"]`); const tempRow = document.createElement('tr'); dropRow.before(tempRow); dragRow.before(dropRow); tempRow.replaceWith(dragRow); } }); ``` 在上面的代码中,我们给表格中的每一行添加了一个 `data-index` 数据属性,用于存储行的索引。在拖拽开始时,我们将拖拽行的索引存储到 `dragIndex` 变量中。在目标行放置时,我们获取目标行的索引,如果拖拽行和目标行的索引不同,就交换两行的位置。具体实现是通过创建一个临时行,将目标行插入到临时行前面,再将拖拽行插入到目标行前面,最后将临时行替换为拖拽行。注意要阻止默认的拖拽行为,否则无法触发目标放置事件。

相关推荐

最新推荐

recommend-type

JS实现table表格数据排序功能(可支持动态数据+分页效果)

数据就是字母和数字两组.(汉字需要找到asc码) 原理就是利用数组自带的sort排序,进行表格重组.已在.net mvc 中测试过.支持分页.(申明一点.只对当前页面数据排序 无刷新,对所有页面排序的话,肯定需要刷新.这点我还在...
recommend-type

原生JS使用Canvas实现拖拽式绘图功能

2、原生JavaScript实现,不依赖任何第三方js库和插件 3、多图形绘制(支持画笔、线条、箭头、三角形、矩形、平行四边形、梯形以及多边形和圆形绘制) 4、拖拽式绘制(鼠标移动过程中不断进行canvas重绘) 5、图片...
recommend-type

JS实现table表格内针对某列内容进行即时搜索筛选功能

主要介绍了JS实现table表格内针对某列内容进行即时搜索筛选功能,涉及javascript针对HTML元素的遍历、属性动态修改相关操作技巧,需要的朋友可以参考下
recommend-type

原生JS发送异步数据请求

在做项目的时候,有时候需要用到异步数据请求,但是如果这个时候没有框架的依赖,就需要用到原生JS进行异步数据请求。这时候无非有两种请求方式,一种是AJAX,另一个是JSONP。通过原生JS对异步请求进行简单的封装。 ...
recommend-type

原生JavaScript实现连连看游戏(附源码)

原生JavaScript版连连看游戏,有源码,适合初学者学习,喜欢的朋友可以研究下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。