先看效果

再看代码
utils.js

import Mock from 'mockjs';

// mock老师们数据
const data = Mock.mock({
'list|10-40': [{
'id|+1': 1,
name: '@cname'
}]
}) // 模拟获取老师接口
export const getTeacher = () => {
return Promise.resolve(data)
} // 处理数据 适配tr->td
export const groupByLen = (len, data) => {
const res = [];
for (let i = 0; i < data.length; i += len) {
res.push(data.slice(i, i + len));
}
return res;
};

app.jsx

import { getTeacher, groupByLen } from './utils';
import { useEffect, useState } from 'react'; export default function App() {
const [teachers, setTeachers] = useState([]);
useEffect(() => {
syncTable()
}, []); const syncTable = async () => {
const { list } = await getTeacher();
const res = groupByLen(6, list);
setTeachers(res);
} // 用户开始拖动元素时触发
const onDragstart = (e) => {
console.log('开始移动', e.target);
e.dataTransfer.setData("Text", e.target.id);
} // 元素正在拖动时触发
const onDrop = (e) => {
e.preventDefault();
const movedTargetId = e.dataTransfer.getData("Text");
const movedTarget = document.getElementById(movedTargetId);
const movedTargetParent = movedTarget.parentNode;
const receiveNodeName = e.target.nodeName;
// 必须放到盒子里
if (receiveNodeName === 'TD') {
movedTargetParent.appendChild(e.target.childNodes[0]);
e.target.innerHTML = '';
e.target.appendChild(movedTarget);
} else if (receiveNodeName === 'DIV') {
const divParent = e.target.parentNode;
movedTargetParent.appendChild(divParent.childNodes[0]);
divParent.innerHTML = '';
divParent.appendChild(movedTarget);
}
} const allowDrop = (e) => {
e.preventDefault();
} return (
<>
<table>
<tbody>
{teachers.map((itemGroup, index) => (<tr key={index}>
{itemGroup.map(item => (<td onDrop={onDrop} key={item.id} onDragOver={allowDrop}>
<div id={item.id} onDragStart={onDragstart} draggable="true">{item.name}</div>
</td>))}
</tr>))}
</tbody>
</table>
</>
)
}

h5/react表格元素拖动交换ondrop的更多相关文章

  1. Html5-draggable元素拖动

    Html5元素拖动 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 支持拖动 ...

  2. vue自定义元素拖动

    岗位序列拖动交换岗位 <span draggable="true" @dragstart="onDragstart($event,index,index2)&quo ...

  3. html中表格元素的相关总结

    表格元素相关总结: 1.在CSS中,内部表元素(如td.tr.col等)生成矩形框,这些矩形框包含内容.内边距和边框,但没有外边距,因此如果定义外边距,浏览器将忽略该定义:对于table元素,外边距有 ...

  4. Griddle, griddle-react 一个REACT 表格组件

    Griddle, griddle-react 一个REACT 表格组件: http://griddlegriddle.github.io/Griddle/index.html

  5. HTML中表格元素TABLE,TR,TD及属性的语法

    table:表格元素及属性 <table width="80%" border="1" cellspacing="1" cellpad ...

  6. ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多

    ListView实现Item上下拖动交换位置  并且实现下拉刷新  上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...

  7. 实现dom元素拖动

    本文主要写一下如何实现dom元素拖动,目前使用jquery库实现之. 主要的注释附在代码中,大家可以根据代码画一个小的窗口模型图,以便于理解. <!DOCTYPE html> <ht ...

  8. 第六十三节,html表格元素

    html表格元素 学习要点:     1.表格元素总汇     2.构建表格解析     本章主要探讨HTML5中表格元素的用法.表格的主要用途是以网格的形式显示二维数据. 一.表格元素总汇     ...

  9. html5权威指南:表格元素

    第十一章:表格元素                                                                                           ...

  10. html5之表格元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. ShardingSphere 解决关联表查询问题的详细方案

    一.基础概念 在分库分表场景下,关联表(JOIN)查询的复杂性主要源于数据分布在不同的数据库或表中.ShardingSphere 通过 绑定表(Binding Table) 和 广播表(Broadca ...

  2. 微信接龙转Excel

    1.新建Excel表格 2.将微信接龙信息复制至表格 3.选择列 4.选择[数据]->[分列] 5.选择[分隔符号]->[下一步] 6.选择[分隔符号]->[下一步] 这里以[空格] ...

  3. 2025dsfz-KMP学习笔记

    KMP 前言:这把高端局 关于KMP 时间复杂度为 \(O(n+m)\) 的优秀字符串查找算法. 适用于在句子/文章中查找一段文字(词语). KMP实现 关于共同前后缀数组(PMT) 说人话就是 \( ...

  4. sql学习day3——case when的使用

    1,当前表 course_master                                                            open_course           ...

  5. xna 渲染3d图片

    我们在做一个3d显示的时候为了突出模型的某些部位以及更好的区别某些模块我们需要渲染各种不同的颜色来体现, 下面代码演示: public void loade() { spriteBatch = new ...

  6. Git提交修正的核心技巧:git commit --amend 的专业实践与深度解析

    结论先行 git commit --amend 是用于 修正最近一次提交 的高效工具,可修改提交信息.追加遗漏文件或调整代码内容,避免冗余提交记录,保持提交历史的简洁性.适用于本地未推送的提交修复场景 ...

  7. java代码中启动exe程序最简单的方法

    使用awt的Desktop类的open方法: public static void startExe(String exePath){ try { if(StringUtils.isNotBlank( ...

  8. 操作系统综合题之“请填写信号量值并说明操作结果(正常、阻塞或唤醒。如阻塞或者唤醒,需说明阻塞或者被唤醒的是P1还是P2)(信号量操作流程-代码补充)”

    1.问题:题36表是两个同步进程的模拟执行,生产者将物品放入共享缓冲区供消费者使用,缓冲区可放2件物品,使用2个信号量,并置初值为S1 = 2,S2=0.现已知操作情况,请填写信号量值并说明操作结果( ...

  9. Grid 布局-容器项

    grid 网格布局是一个用于web的二维布局系统, 多行多列. flex 单行布局则更倾向于一维布局, 一行或者一列. Grid 重点 只是用表格进行排版哈, 横向内容直接无关联哦. 容器项 子项 布 ...

  10. 5个让你眼前一亮的JavaScript装饰器技巧

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...