在使用table制作目录时,会遇到调整目录顺序的问题;
或者在使用table显示数据时,通过改变table中数据的顺序,使得两条不相邻的数据相邻,对比数据信息。
那么,通过什么方法,能够拖动table中tr元素呢?
本文使用jQuery和jquery UI框架中的函数,通过鼠标拖动tr,改变tr的顺序。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>table拖拽</title>
<style>
tr {
cursor: pointer;
}
td {
padding: 5px 10px;
}
</style>
<script type="text/javascript" src="../jquery-1.11.2.min.js"></script>
<script type="text/javascript" src="../jquery-ui.js"></script>
</head>
<body>
<table id="sort">
<thead>
<tr>
<th class="index">序号</th>
<th class="year">年份</th>
<th>标题</th>
<th>作者</th>
</tr>
</thead>
<tbody>
<tr>
<td class="index">1</td>
<td class="year">2011</td>
<td>第一行</td>
<td>红发---红发</td>
</tr>
<tr>
<td class="index">2</td>
<td class="year">2012</td>
<td>第二行</td>
<td>多夫朗明哥</td>
</tr>
<tr>
<td class="index">3</td>
<td class="year">2013</td>
<td>第三行</td>
<td>甚平---甚平</td>
</tr>
<tr>
<td class="index">4</td>
<td class="year">2014</td>
<td>第四行</td>
<td>鹰眼---鹰眼</td>
</tr>
</tbody>
</table>
<script>
$(document).ready(function() {
var fixHelperModified = function(e, tr) {
//children() 方法返回返回被选元素的所有直接子元素
var $originals = tr.children();
//clone() 方法生成被选元素的副本,包含子节点、文本和属性
var $helper = tr.clone();
//each() 方法规定为每个匹配元素规定运行的函数
$helper.children().each(function(index) {
//width() 方法返回或设置匹配元素的宽度
//eq() 方法将匹配元素集缩减值指定 index 上的一个
$(this).width($originals.eq(index).width())
});
return $helper;
},
updateIndex = function(e, ui) {
//ui.item - 表示当前拖拽的元素
//parent() 获得当前匹配元素集合中每个元素的父元素,使用选择器进行筛选是可选的
$('td.index', ui.item.parent()).each(function(i) {
//html() 方法返回或设置被选元素的内容 (inner HTML)
$(this).html(i + 1);
});
};
$("#sort tbody").sortable({
//设置是否在拖拽元素时,显示一个辅助的元素。可选值:'original', 'clone'
helper: fixHelperModified,
//当排序动作结束时触发此事件。
stop: updateIndex
}).disableSelection();
});
</script>
</body>
</html>
代码中主要使用两个函数 $("selector").sortable().disableSelection(),helper和stop为sortable函数中的参数。
所有的事件回调函数都有两个参数:event和ui,浏览器自有event对象,和经过封装的ui对象
ui.helper - 表示sortable元素的JQuery对象,通常是当前元素的克隆对象
在任意的 DOM 元素上启用 sortable 功能。通过鼠标点击并拖拽元素到列表中的一个新的位置,其它条目会自动调整。默认情况下,sortable 各个条目共享 draggable
属性。