表单拖动列,改变列的位置
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="jquery.min.js"></script>
<style>
td{color:#999}
th{ cursor: move;line-height: 34px;min-width:150px;}
.createDivBg{ position: fixed;top: 0;bottom: 0;left: 0;right: 0;z-index: 10000;cursor: move;-moz-user-select:none;-webkit-user-select: none;-o-user-select: none;-ms-user-select:none}
.createDiv{ border: 1px dotted #ccc;height: 34px;line-height: 34px;background:#eee;position: absolute;z-index:100000}
</style>
</head>
<body>
<div class="Report">
<table class="" border="1" cellspacing="0">
<thead>
<tr>
<th value="1">公司名称</th>
<th value="2">订单号</th>
<th value="3">操作日期</th>
<th value="4">PNR</th>
<th value="5">乘客英文名</th>
<th value="6">乘客类型</th>
<th value="7">证件类型</th>
<th value="8">证件号</th>
<th value="9">乘客手机号码</th>
<th value="10">票面价</th>
</tr>
</thead>
<tbody>
<tr><td>蓝城房产建设管理集团有限公司</td><td>FA20160801144605983</td><td>2016-08-02</td><td>HY59C0</td><td></td><td>成人</td><td>身份证</td><td>330102196709050315</td><td>13705819983</td><td>-940.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
<tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
</tbody>
</table>
</div>
</body>
</html>
<script>
var arrTh = [];//保存初始每个th位置的数组
$('.Report th').each(function (i, e) {
arrTh.push({ 'index': i, 'left': $(e).offset().left });
});
var thisThIndex = 0;
var thisThLeft = 0;//存储当前拖拽层的位置
var isMove = false;
$(document).on('mousedown','.Report th', function (e) {
var initX = e.pageX - $(this).offset().left;
var initY = $(this).offset().top;//点击的th到页面顶部的距离
var thisHtml = $(this).html();//点击的th的html
thisThIndex = $(this).index();//点击的th的索引
thisThLeft = $(this).offset().left;//当前拖拽层的位置
$(this).css({ 'background': '#ccc' });
var createDiv = $('<div class="createDiv">' + thisHtml + '</div>');//创建一个div用于拖拽显示
var createDivBg = $('<div class="createDivBg"></div>');//创建一个背景,防止复制文字
$('body').append(createDiv,createDivBg);//填充到页面中
createDiv.css({ 'top': initY, 'left': $(this).offset().left });// 'width': $(this).width(),//设置拖拽层的初始位置
$(document).on('mousemove', function (ev) {
if (Math.abs(ev.pageX - e.pageX) > 30) {//如果鼠标移动的位置超过30
isMove = true;
thisThLeft = ev.pageX - createDiv.width() / 2;//刷新当前拖拽层的位置
if (thisThLeft <= $('.Report th').offset().left) {
thisThLeft = $('.Report th').offset().left;
}
if (thisThLeft >= ($('.Report th').offset().left+$('.Report table').width()-createDiv.width())) {
thisThLeft = $('.Report th').offset().left+$('.Report table').width()-createDiv.width();
}
createDiv.css({ 'left': thisThLeft, 'top': initY });//拖拽层跟着鼠标走
var newsindex = 0;//循环的最后一个小于thisThLeft的索引
$.each(arrTh, function (index, element) {//遍历数组
var thIndex = element.index;//页面中所有th的索引
var thLeft = element.left;//页面中所有th到页面右边的距离
if (thisThLeft > thLeft) {
newsindex = thIndex;//循环的最后一个小于thisThLeft的索引
}
});
$('.Report th').eq(newsindex).css({ 'border-right': '2px solid red' }).siblings('th').css({ 'border-right': '1px solid #ddd' });//给当前th加边框
$('.Report tbody tr').each(function (tdindex, tdelement) {//给对应的列td加边框
$(tdelement).find('td').eq(newsindex).css({ 'border-right': '2px solid red' }).siblings('td').css({ 'border-right': '1px solid #ddd' });
});
}
});
});
$(document).on('mouseup', function (e) {
$('.Report th').css({ 'border-right': '1px solid #ddd','background':'none' });
$('.Report td').css({ 'border-right': '1px solid #ddd' });
$('.createDiv').remove();
$('.createDivBg').remove();
$(document).unbind('mousemove');
if (isMove) {
isMove = false;
var newsindex = 0;//循环的最后一个小于thisThLeft的索引
$.each(arrTh, function (index, element) {
var thIndex = element.index;
var thLeft = element.left;
if (thisThLeft > thLeft) {
newsindex = thIndex;
}
});
var newth = $('.Report th').eq(thisThIndex).prop('outerHTML');
//console.log(newsindex + ',,,' + thisThIndex);
if (newsindex >= thisThIndex) {
if (newsindex != 0) {//如果是第一个的情况下
$('.Report th').eq(thisThIndex).remove();
$('.Report th').eq(newsindex-1).after(newth);
}
} else {
if ((newsindex + 2) != arrTh.length) {//如果是最后一个的情况下
$('.Report th').eq(thisThIndex).remove();
$('.Report th').eq(newsindex + 1).before(newth);
}
}
$('.Report tbody tr').each(function (tdindex, tdelement) {
var newtd = $(tdelement).find('td').eq(thisThIndex).prop('outerHTML');
if (newsindex >= thisThIndex) {
if (newsindex != 0) {
$(tdelement).find('td').eq(thisThIndex).remove();
$(tdelement).find('td').eq(newsindex - 1).after(newtd);
}
} else {
if ((newsindex + 2) != arrTh.length) {
$(tdelement).find('td').eq(thisThIndex).remove();
$(tdelement).find('td').eq(newsindex + 1).before(newtd);
}
}
});
}
arrTh = [];//重置保存每个th位置的数组
$('.Report th').each(function (i, e) {
arrTh.push({ 'index': $(e).index(), 'left': $(e).offset().left });
});
//console.log(arrTh);
});
</script>
完整代码请戳https://github.com/slailcp/dargtable/tree/master/drabTable