我正在尝试学习jQueryUI可排序功能,以使其在我在网页上使用的响应表上正常工作。
我做了jsfiddle进行了一些测试,但我不知道如何拖放列(不仅如此)。
我怀疑我应该使用“ connectWith”(或“ items”?)选项,并连接所有与拖曳的th共享相同id的td,但我做不到。
我什至不确定这实际上是为“ connectWith”或“ items”创建的,但是在文档中找不到其他东西似乎可以帮助我实现列的拖放。
HTML:
<html>
<body>
<table>
<thead>
<tr>
<th>Col 1</th>
<th>Col 2</th>
<th>Col 3</th>
<th>Col 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>data 1</td>
<td>data 2</td>
<td>data 3</td>
<td>data 4</td>
</tr>
<tr>
<td>data 1</td>
<td>data 2</td>
<td>data 3</td>
<td>data 4</td>
</tr>
</tbody>
</table>
</body>
</html>
CSS:
*html, body {
margin:0px;
padding:0px;
width:100%;
height:100%;
}
body:before{
content: "";
display: block;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
table{
table-layout: fixed;
margin: 0 auto;
border-collapse: collapse;
overflow: hidden;
white-space: nowrap;
width:100%;
color:#000;
float:left;
}
tr{
display:table-row;
border: 1px solid black
}
th, td {
border:1px solid #000;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: table-cell;
text-align:center;
}
th{
position: relative;
background:#bbb;
}
jQuery:
$( function() {
$('thead tr').sortable({
start: function(e, ui)
{
var ind_th= ui.item.index();
$('tbody td:nth-child('+(ind_th+1)+')').addClass('drg').css('color','red');
},
connectWith:".drg",
stop: function(e, ui)
{
$('tbody td').removeClass('drg')
}
});
});
谢谢您的帮助。
答案 0 :(得分:1)
这不是很漂亮,但是可以完成工作。
工作示例:https://jsfiddle.net/Twisty/q7oyh9mj/53/
JavaScript
$(function() {
$('thead tr').sortable({
containment: "parent",
placeholder: "placeholder",
opacity: 0.5,
helper: "clone",
axis: 'x',
start: function(e, ui) {
var ind_th = ui.item.index();
$('tbody tr').each(function(ind, el) {
$('td', el).eq(ind_th).addClass('drg').css('color', 'red');
});
},
stop: function(e, ui) {
var itInd = ui.item.index();
$("tbody tr").each(function(ind, el) {
var cell = $(".drg", el).detach();
cell.insertBefore($("td", el).eq(itInd));
cell.removeClass("drg").css("color", "black");
});
}
});
$('thead tr').disableSelection();
});
您也可以使用function(event, element)
创建自己的帮助程序,但在stop
或update
中的啮合效果不佳。
因此,在start
中,我添加了类drg
以帮助标识将要移动的单元格。触发stop
之后,我将使用.detach()
将它们从行中删除,然后使用insertBefore()
根据标题索引将它们放回到行中的新位置。
如果您有很多数据,建议您查看DataTables。我相信它可以提供此功能。
更新
新示例:https://jsfiddle.net/Twisty/q7oyh9mj/72/
两个小变化:
containment
;这是为了防止标题拖到表格边界之外,并且无法将其放置在第一位置。if
,以将下降点何时作为最后一项您还可以调整tolerance
选项:https://jsfiddle.net/Twisty/q7oyh9mj/73/
您选择的管理方式。
希望有帮助。