Я не могу узнать, как получить целевой элемент с 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
точки к СПИСКУ (OL) элемент.
При высказывании второй я имею в виду следующее:
Первоначальный заказ:
| 0 | 1 | 2 | 3 |
Мы перетаскиваем элемент 1 и отбрасываем его в положении 3. Который закончится с:
| 0 | 3 | 2 | 1 |
Таким образом, первый элемент равняется 1, и второе равняется 3 (НЕПРАВИЛЬНО! Посмотрите ниже).
ОБНОВЛЕНИЕ: Я понял, что понял его превратно. Новый порядок в этом случае будет.
| 0 | 2 | 3 | 1 |
В результате мой вопрос не делает действительно имеет смысл. Спасибо все для справки. Я отмечу голосование и отмечу ответ.
Таким образом, вопрос состоит в том, как получить второй элемент здесь?
ТЕКУЩЕЕ ОБХОДНОЕ РЕШЕНИЕ (как нет никакого термина в качестве загрузки поддающегося сортировке) ниже. Это использует временный массив с заказами.
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.
На самом деле "второго" предмета как такового нет. У вас есть предмет, и вы просто кладете его в другое место. Элементы вокруг него соответственно меняют свое положение. Если вы хотите получить массив всех элементов, вы можете использовать метод toArray .
Попробуйте использовать функцию serialize, которая дает вам хэш списка элементов по порядку.
Если вам нужен только элемент, перед которым опускается новый элемент, вы можете сделать следующее:
$("#pages").sortable({
opacity: 0.6,
update: function(event, ui) {
var first = ui.item; // First element to swap
var second = ui.item.prev();
swapOnServer(first, second);
}
});
second будет null, если он находится в начале списка.
взгляните на плагин jQuery "Swapable":
http://plugins.jquery.com/project/Swapable
Он похож на "Sortable", но затрагиваются только два элемента выбранной группы: перетаскиваемый элемент и отбрасываемый элемент, который поменяны местами. Все остальные элементы остаются на своих текущих позициях. Этот плагин построен на основе существующего плагина jQuery «Сортировка» и наследует все параметры сортировки.