table列表实现拖拽移动tr

Table列表中实现拖拽移动tr

今天用户提的一个需求为能够拖拽table中的tr,实现tr的换行,他好临近对比数据。
在这里插入图片描述
这种效果
网上搜了很多答案,包括使用jquery的custom包,ui包等实现,发现在我们的系统中并不能实现。最终通过搜索资料发现:
还是用jquery ui的sortable
首先:引入依赖,jquery的ui包请去搜索下载
注意!
jquery.min.js这个一定要放在下面两个依赖的前面

<script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="${ctx}/static/plugin/jquery-ui/jquery-ui.min.css" />
<script src="${ctx}/static/plugin/jquery-ui/jquery-ui.min.js"></script>

然后就是JS代码


var fixHelperModified = function(e, tr) {
		debugger;
		var $originals = tr.children();

		var $helper = tr.clone();

		$helper.children().each(function(index) {
		$(this).width($originals.eq(index).width())

		});

		return $helper;

		},

		updateIndex = function(e, ui) {
		$('td.index', ui.item.parent()).each(function (i) {
		$(this).html(i + 1);

		});

		};

		$("#你的table的ID tbody").sortable({
		helper: fixHelperModified,	

		stop: updateIndex

		}).disableSelection();


其实只需$("#sort tbody").sortable().disableSelection();就可以实现所需功能。
另外两个回调函数作用为:

helper: fixHelperModified,这个函数的作用是:克隆你正在拖动的tr,然后依次设置你克隆的那个tr的td的宽度,使之拖动时的宽度与原来一致。也就是说,不回调这个函数也可以,就是拖动的时候tr中的单元格宽度会变小。当然了不影响放手后的宽度。

stop: updateIndex,这个函数的作用是,拖动后维护现在索引(即第一列的值)。

注意事项:
页面中必须要先有table和tbody的实际体存在!!!
类似下图
在这里插入图片描述
我的项目中一开始这个页面table、tbody都是没有的,都是在js中load进来的,所以没有产生效果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现鼠标拖拽上下移动调整el-table的排顺序,可以使用el-table内置的sortable属性和dragging事件,并结合自定义的拖拽功能。 首先,需要给el-table的行添加一个自定义的拖拽指示器,用于识别拖拽的起始和目标位置。可以使用HTML5的draggable属性来实现拖拽功能。在el-table中,可以通过scoped slot来自定义行的内容。 在模板中,可以这样定义el-table: ```html <el-table :data="tableData" :sortable="true"> <template slot-scope="{ row, $index }"> <tr draggable="true" @dragstart="handleDragStart($event, $index)" @dragover="handleDragOver($event, $index)" @drop="handleDrop($event, $index)" @dragend="handleDragEnd"> <!-- 行内容 --> </tr> </template> </el-table> ``` 在这个例子中,我们给每一行的tr元素添加了draggable属性,并绑定了dragstart、dragover、drop和dragend事件。其中,dragstart事件表示拖拽开始,dragover事件表示拖拽过程中,drop事件表示拖拽结束时放置元素,dragend事件表示拖拽结束。 接下来,在Vue组件中定义相关的事件处理方法: ```javascript methods: { handleDragStart(event, index) { event.dataTransfer.setData('text/plain', index); // 设置被拖动的数据 event.dataTransfer.effectAllowed = 'move'; // 设置拖动的效果 event.target.classList.add('dragging'); // 添加拖动时的样式 }, handleDragOver(event, index) { event.preventDefault(); // 阻止默认行为 event.dataTransfer.dropEffect = 'move'; // 设置拖动的效果 }, handleDrop(event, index) { event.preventDefault(); // 阻止默认行为 const fromIndex = Number(event.dataTransfer.getData('text/plain')); // 获取被拖动的数据 if (fromIndex !== index) { this.tableData.splice(index, 0, this.tableData.splice(fromIndex, 1)[0]); // 调整数据的位置 } }, handleDragEnd(event) { event.target.classList.remove('dragging'); // 移除拖动时的样式 } } ``` 在handleDragStart方法中,我们使用event.dataTransfer.setData方法来设置被拖动的数据,这里我们将行的索引作为数据进行传递。同时,我们设置了拖动的效果和添加了拖动时的样式。 在handleDragOver方法中,我们通过event.preventDefault方法阻止默认行为,并设置了拖动的效果。 在handleDrop方法中,我们通过event.preventDefault方法阻止默认行为,并获取被拖动的数据,然后根据拖动的起始和目标位置调整el-table的数据的位置。 在handleDragEnd方法中,我们移除了拖动时添加的样式。 最后,可以通过CSS来定义拖动时的样式: ```css tr.dragging { background-color: #f0f0f0; } ``` 这样,就实现了el-table的鼠标拖拽上下移动调整排顺序的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值