上一次学习了html5的drag和drop方法,传送门  就自己写了个例子加深自己对drag和drop的理解。不过一开始不是很简单,遇到了不少问题。还好网络万能的,什么都能查到,总算完成了。

说明和详解都在代码里。

html和css代码如下:

<table>
<thead>
<tr>
<th>年龄</th>
<th>姓名</th>
<th>面试时间</th>
<th>面试类型</th>
<th>面试官</th>
<th>结论</th>
</tr>
</thead>
<tbody>
<tr>
<td>33</td>
<td >章三</td>
<td>2018-04-04</td>
<td>交互设计师</td>
<td>琪琪</td>
<td>待查</td>
</tr>
<tr>
<td>20</td>
<td >李四</td>
<td>2018-03-07</td>
<td>前端工程师</td>
<td>悠悠</td>
<td></td>
</tr>
<tr>
<td>24</td>
<td >王五</td>
<td>2018-04-10</td>
<td>java工程师</td>
<td>懒懒</td>
<td></td>
</tr>
<tr>
<td>18</td>
<td >六六</td>
<td>2018-03-05</td>
<td>UI设计师</td>
<td>张施</td>
<td>通过</td>
</tr>
<tr>
<td>21</td>
<td >刘灿</td>
<td>2018-04-14</td>
<td>交互设计师</td>
<td>琪琪</td>
<td>通过</td>
</tr>
<tr>
<td>28</td>
<td >李江</td>
<td>2018-03-27</td>
<td>前端工程师</td>
<td>悠悠</td>
<td></td>
</tr>
<tr>
<td>22</td>
<td >王雷</td>
<td>2018-03-30</td>
<td>java工程师</td>
<td>懒懒</td>
<td></td>
</tr>
<tr>
<td>25</td>
<td >刘哲</td>
<td>2018-03-16</td>
<td>UI设计师</td>
<td>张施</td>
<td>通过</td>
</tr>
</tbody>
</table>

javascript代码如下:

<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
$('thead th').attr('draggable',true); // 将表格th声明为可拖拽

    $('thead th').on('dragstart',function(ev){
// 被拖数据的数据类型和值
ev.originalEvent.dataTransfer.setData("Text", ev.currentTarget.cellIndex);
}) $('thead th').on('dragover',function(ev){
// 阻止默认行为
ev.preventDefault();
}) $('thead th').on('drop',function(ev){
// 阻止默认行为
ev.preventDefault();
// 获取被拖的数据的索引
var id = ev.originalEvent.dataTransfer.getData("Text");
// 当前要放下的索引
var Id = this.cellIndex;
// 存储点击的this
var that = this;
// 遍历th
$('thead th').each(function(){
// 获取遍历的每一个th,这个this和点击的this不一样
var _this = this;
// 当遍历的每一个th的索引和被拖拽的索引一致时,重构
if(_this.cellIndex == id){
if(id > Id){
that.before(_this);
}else{
that.after(_this);
}
}
})
// 遍历tbody的tr
$('tbody tr').each(function(i){
// 提供一个容器,分别用来存储原位置的一列和被拖拽的一列
var box1 = "";
var box2 = "";
// 遍历tr中的td
$(this).children('td').each(function(){
// 存储原位置的一列
if(this.cellIndex == Id){
box1 = this;
}
// 存储被拖拽的一列
if(this.cellIndex == id){
box2 = this;
}
})
if(id > Id){
box2.after(box1);
}else{
box2.before(box1);
}
})
})

遇到的问题:

1 setData获取不到,报错。
原因:因为是参数ev是被jquery封装的,而不是自身原生的,要获取就按 ev.originalEvent.dataTransfer.setData()。

2 不是所有的事件方法都要有ev.preventDefault();这样也会阻止本身自己写的方法。

3 在遍历tbody的td时,没有想到怎么按照顺序放置拖拽和原位置,同事解答之后,才知道需要一个容器去存储。

大家对这个实例如果有问题或者有更好的办法,请评论或私信,一起进步。

参考资料:

1 http://www.cnblogs.com/sqh17/p/8676983.html

根据HTML5的新方法 drag & drop 方法实现表格拖拽实例的更多相关文章

  1. Win10/UWP新特性—Drag&Drop 拖出元素到其他App

    在以前的文章中,写过微软新特性Drag&Drop,当时可能由于处于Win10预览版,使用的VS也是预览版,只实现了从桌面拖拽文件到UWP App中,没能实现从UWP拖拽元素到Desktop A ...

  2. HTML5拖拽实例

    最近应该会用到,借用一下......小妹儿,你又变懒了 拖拽相关属性 draggable属性是html5的全局属性,是html5支持拖放操作的方式之一,用来表示元素是否可以被拖放,draggable有 ...

  3. HTML5 之 FileReader 的使用 (网页上图片拖拽并且预显示可在这里学到) [转载]

    转载至 : http://www.360doc.com/content/14/0214/18/1457948_352511416.shtml FileReader 资料(英文) : https://d ...

  4. 图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传

    一 . 背景及效果 当前互联网上传文件最多的就是图片文件了,但是传统web图片的截图上传需要:截图保存->选择路径->保存后再点击上传->选择路径->上传->插入. 图片 ...

  5. swift方法 的写法,ui上拖拽的控件到controller里面的方法

    直接点xcode右上角三个按键中间一下,左右拆分为storyboard和controller, 点击button,按ctrl,然后拖拽到controller里面即可生成对应的点击事件在controll ...

  6. 用HTML5 File API 实现截图粘贴上传、拖拽上传

    <!DOCTYPE html><html><head> <title>test chrome paste image</title> < ...

  7. HTML5魔法堂:全面理解Drag & Drop API

    一.前言    在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面 ...

  8. HTML5 拖拽实现

    简介: 最早在网页中引入JavaScript拖放功能是IE4.当时,网页中只有两种对象可以拖放:图像和某些文本.拖放图像时,把鼠标放到图像上,按住鼠标不放就可以拖放它.拖放文本时,要先选中文本,然后可 ...

  9. HTML5多图片拖拽上传带进度条

    前言 昨天利用css2的clip属性实现了网页进度条觉得还不错,但是很多情况下,我们在那些时候用进度条呢,一般网页加载的时候如果有需要可以用,那么问题就来了,怎么才算整个加载完毕呢,是页面主要模块加载 ...

随机推荐

  1. Luogu[POI2005]KOS-Dicing

    题面 二分后用网络流判定 S->人,流量为二分的mid 人->比赛,流量为1 比赛->T,流量为1 输出方案只要判断a就可以了 # include <bits/stdc++.h ...

  2. Delphi关于TAdvStringGrid控件颜色的设置

    FixedFont-Color 标题行和列字体的颜色 Font-color 单元格字体的颜色Visual-color 整个表格的背景色填充

  3. Web前端有价值的博客文章汇总

    一.HTML 二.CSS 1.深入理解position和z-index属性 :https://www.cnblogs.com/zhuzhenwei918/p/6112034.html 2.BFC(清除 ...

  4. js文本框字符数输入限制

    我们常常在前台页面做一些文本输入长度的验证,为什么呢?因为数据库字段设置了大小,如果不限制输入长度,那么写入库时就会引发字符串截断异常.今天就给大家分享一个jquery插件来解决这一问题. (func ...

  5. 移动端造json假数据时的坑(转义符问题)

    最近在 Json 数据的解析上碰到了一些坑,特此记录一下. 正文 迭代开发中,经常出现服务端接口还没开发完成的情况,所以经常需要移动端自己在本地造一些假数据. emmm,虽然说好像造假数据也不是什么很 ...

  6. Hadoop2.x 体系结构和源码编译

    体系结构 Hadoop1的核心组成包括HDFS和MapReduce.HDFS和MapReduce的共同点就是他们都是分布式的. HDFS是包括主节点NameNode,只有一个,还有很多从节点DataN ...

  7. luogu3244 bzoj4011 HNOI2015 落忆枫音

    这道题目题面真长,废话一堆. 另外:这大概是我第一道独立做出来的HNOI2011年以后的题目了吧.像我水平这么差的都能做出来,dalao您不妨试一下自己想想? 题目大意:给一个DAG,其中1号点没有入 ...

  8. adobe media encoder cc 2015在win10中打开崩溃的解决办法(该方法同样适用于adobe其他产品)

    今天就给大家讲讲adobe media encoder cc 2015启动的时候崩溃的问题,先来看看现象.就是这样了,然后我在网上找了很多办法,有的方法已经过时了,也或者因为现在新版本的adobe m ...

  9. 【Unity与23种设计模式】备忘录模式(Memento)

    GoF中定义: "在不违反封装的原则下,获取一个对象的内部状态并保留在外部,让对象可以在日后恢复到原先保留时的状态." 对于一些需要存储的数据,比如历史最高分 当与得分减分系统写入 ...

  10. C语言第四次博客作业--嵌套循环

    一.PTA实验作业 题目1:编程打印空心字符菱形 1. 本题PTA提交列表 2. 设计思路(流程图) 3.本题调试过程碰到问题及解决办法 思考过程:将问题拆解为菱形问题和字母变化问题两部分 1> ...