我遇到了jqueryui排序问题。
现在我有一个在tr上排序的表,它全部正常工作,但现在我必须一次排序2行。在下面的示例中,我必须将行与G1或G2或G3排在一起。
现在我把头撞到墙上几个小时后,我来这里寻求帮助。
Queryui排序有选项 item ,我尝试使用它但不能在表中进行工作。
有办法做到这一点吗?有人可以帮帮我吗?
我在这里试试https://jsfiddle.net/n29ekt42/
<table>
<thead>
<tr>
<th>T1</th>
<th>T1</th>
<th>T1</th>
</tr>
</thead>
<tbody>
<tr>
<td>G1</td>
<td>G1</td>
<td>G1</td>
</tr>
<tr>
<td>G1</td>
<td>G1</td>
<td>G1</td>
</tr>
<tr>
<td>G2</td>
<td>G2</td>
<td>G2</td>
</tr>
<tr>
<td>G2</td>
<td>G2</td>
<td>G2</td>
</tr>
<tr>
<td>G3</td>
<td>G3</td>
<td>G3</td>
</tr>
<tr>
<td>G3</td>
<td>G3</td>
<td>G3</td>
</tr>
</tbody>
</table>
function assignSortAttach() {
$("table tbody").sortable({
start: function( event, ui ) {
var aa = $this.attr('data-row');
}
})
}
// TR sortable
$(function () {
assignSortAttach()
});
答案 0 :(得分:3)
我发现这比我预想的要困难,所以我捅了一下。我分叉你的小提琴并做了一些更新。
工作示例:https://jsfiddle.net/Twisty/n29ekt42/13/
我添加了一个句柄列。
<强> HTML 强>
<table>
<thead>
<tr>
<th></th>
<th>T1</th>
<th>T1</th>
<th>T1</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="handle ui-icon ui-icon-grip-dotted-vertical"></span></td>
<td>G1</td>
<td>G1</td>
<td>G1</td>
</tr>
...
如果您愿意,可以使用很多CSS。
<强> CSS 强>
table {
border-collapse: collapse;
}
table thead tr {
margin-left: 20px;
}
table tbody tr {
border: 1px solid #ccc;
}
tr.ui-selecting {
background: #FECA40;
}
tr.ui-selected {
background: #F39814;
color: white;
}
.hidden {
display: none;
}
<强>的jQuery 强>
function assignSortAttach() {
$("table tbody").sortable({
axis: "y",
cursor: "grabbing",
handle: ".handle",
opacity: 0.6,
helper: function(e, item) {
console.log("Parent-Helper: ", item);
if (!item.hasClass("ui-selected")) {
item.addClass("ui-selected");
}
// Clone selected elements
var elements = $(".ui-selected").not('.ui-sortable-placeholder').clone();
console.log("Making helper: ", elements);
// Hide selected Elements
item.siblings(".ui-selected").addClass("hidden");
var helper = $("<table />");
helper.append(elements);
console.log("Helper: ", helper);
return helper;
},
start: function(e, ui) {
var elements = ui.item.siblings(".ui-selected.hidden").not('.ui-sortable-placeholder');
ui.item.data("items", elements);
},
update: function(e, ui) {
console.log("Receiving: ", ui.item.data("items"));
$.each(ui.item.data("items"), function(k, v) {
console.log("Appending ", v, " before ", ui.item);
ui.item.before(v);
});
},
stop: function(e, ui) {
ui.item.siblings(".ui-selected").removeClass("hidden");
$("tr.ui-selected").removeClass("ui-selected");
}
})
.selectable({
filter: "tr",
cancel: ".handle"
})
}
$(function() {
assignSortAttach();
});
这是根据以下代码改编的:jQuery Sortable - drag and drop multiple items和此处:jQuery UI sortable & selectable
使用排序和选择的功劳归于mhu。这非常有效,因为您可以拖动选择或按CTRL +单击以选择行。您可以拖动并选择一个组,或单击将对拖动进行分组的unqiue项目。然后使用拖动手柄,用户可以对所选行进行排序。
TJ使我们能够对多个项目进行排序。他的演示旨在在不同的列表之间移动元素,因此我将事件receive
与update
切换。
从轻率评论到答案,我希望有所帮助。
评论后更新
工作示例:https://jsfiddle.net/Twisty/Lbu7ytbj/
我更改 HTML 以对行进行分组:
<table>
<thead>
<tr>
<th> </th>
<th>T1</th>
<th>T1</th>
<th>T1</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="2"><span data-group="1" class="handle ui-icon ui-icon-grip-dotted-vertical"></span></td>
<td>G1</td>
<td>G1</td>
<td>G1</td>
</tr>
<tr>
<td>G1</td>
<td>G1</td>
<td>G1</td>
</tr>
</tbody>
<tbody>
<tr>
<td rowspan="2"><span data-group="3" class="handle ui-icon ui-icon-grip-dotted-vertical"></span></td>
<td>G2</td>
<td>G2</td>
<td>G2</td>
</tr>
<tr>
<td>G2</td>
<td>G2</td>
<td>G2</td>
</tr>
</tbody>
<tbody>
<tr>
<td rowspan="2"><span data-group="5" class="handle ui-icon ui-icon-grip-dotted-vertical"></span></td>
<td>G3</td>
<td>G3</td>
<td>G3</td>
</tr>
<tr>
<td>G3</td>
<td>G3</td>
<td>G3</td>
</tr>
</tbody>
</table>
现在我所要做的就是调整sortable
以使用该表而不使用thead
。
function assignSortAttach() {
$("table").sortable({
axis: "y",
cursor: "grabbing",
handle: ".handle",
cancel: "thead",
opacity: 0.6,
placeholder: "two-place",
helper: function(e, item) {
if (!item.hasClass("selected")) {
item.addClass("selected");
}
console.log("Selected: ", $(".selected"));
var elements = $(".selected").not(".ui-sortable-placeholder").clone();
console.log("Making helper from: ", elements);
// Hide selected Elements
$(".selected").not(".ui-sortable-placeholder").addClass("hidden");
var helper = $("<table />");
helper.append(elements);
console.log("Helper: ", helper);
return helper;
},
start: function(e, ui) {
var elements = $(".selected.hidden").not('.ui-sortable-placeholder');
console.log("Start: ", elements);
ui.item.data("items", elements);
},
update: function(e, ui) {
console.log("Receiving: ", ui.item.data("items"));
ui.item.before(ui.item.data("items")[1], ui.item.data("items")[0]);
},
stop: function(e, ui) {
$('.selected.hidden').not('.ui-sortable-placeholder').removeClass('hidden');
$('.selected').removeClass('selected');
}
});
}
$(function() {
assignSortAttach();
$(".handle").attr("title", "Use me to drag and sort.");
});
我还为占位符添加了CSS:
.two-place {
display: block;
visibility: visible;
height: 2.5em;
width: 0;
}
.two-place::after {
content: "";
border: 1px dashed #ccc;
float: left;
background-color: #eee;
height: 2.5em;
width: 100px;
}