我无法找到如何使用jQuery UI sortable获取目标元素的方法。
$("#pages").sortable({
opacity: 0.6,
update: function(event, ui) {
var first = ui.item; // First element to swap
var second = ???? // Second element to swap
swapOnServer(first, second);
}
});
我尝试过的所有选项都指向被拖动的元素,而不是与之交换的元素:ui.item [0]
、event.srcElement
、event.toElement
。另外,this
指向列表 (OL) 元素。这里“第二个”是指下面的情况:
初始顺序为: | 0 | 1 | 2 | 3 |
我们将元素 1 拖到位置 3 并放下。结果如下: | 0 | 3 | 2 | 1 |
所以第一个元素是 3,第二个元素是 1(WRONG!请看下文)。
更新:我意识到自己理解错了。在这种情况下,新的顺序应该是: | 0 | 2 | 3 | 1 |
因此我的问题实际上没有意义。谢谢大家的帮助。我会投票并标记一个答案。
所以问题是如何在这里获得第二个元素?
当前的解决方法(因为在 sortable 中没有“交换”这个术语)如下所示。它使用具有顺序的临时数组。
var prevPagesOrder = [];
$("#pages").sortable({
start: function(event, ui) {
prevPagesOrder = $(this).sortable('toArray');
},
update: function(event, ui) {
var currentOrder = $(this).sortable('toArray');
var first = ui.item[0].id;
var second = currentOrder[prevPagesOrder.indexOf(first)];
swapOnServer(first, second);
}
});
谢谢,
Dmitriy。
swapOnServer
方法怎么样? - San Diagovar second = currentOrder[prevPagesOrder.indexOf(first)];
应该改为var second = prevPagesOrder[currentOrder.indexOf(first)];
。 - nazar kuliyev