【发布时间】:2011-01-16 20:20:12
【问题描述】:
我不知道如何使用可排序的 jQuery UI 获取目标元素。
$("#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 指向 LIST (OL) 元素。
说第二我的意思是跟随:
原来的顺序是:
| 0 | 1 | 2 | 3 |
我们将元素 1 拖放到位置 3。最终会得到:
| 0 | 3 | 2 | 1 |
所以第一个元素是 1,第二个是 3(错误!见下文)。
更新:我意识到我弄错了。这种情况下的新顺序将是。
| 0 | 2 | 3 | 1 |
因此,我的问题并没有真正的意义。谢谢大家的帮助。我会标记投票并标记答案。
那么问题是这里如何获取第二个元素呢?
当前的解决方法(因为在可排序中没有作为 swapping 的术语)如下。它使用带有订单的临时数组。
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);
}
});
谢谢,
德米特里。
【问题讨论】:
-
@Dimitriy,没有“第二项”,因此您的问题非常不清楚。如果您允许用户在列表中的任何位置拾取和放置项目,它只是移动索引为其腾出空间。只有当他将它向上或向下移动一个位置时,才会影响两个项目。但是如果他从列表的顶部取出它,并在接下来的三个项目之后将其丢弃,那么前三个项目的位置都会受到移动的影响。没有发生“切换”。请更详细地描述您需要完成的工作。
-
swapOnServer方法怎么样? -
尝试了解决方案,似乎这一行:
var second = currentOrder[prevPagesOrder.indexOf(first)];应该是var second =prevPagesOrder[currentOrder.indexOf(first)];
标签: javascript jquery jquery-ui jquery-ui-sortable