поддающийся сортировке jQuery получает 2 подкачиваемые элемента

Я не могу узнать, как получить целевой элемент с 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.

16
задан Dmytrii Nagirniak 15 February 2010 в 03:48
поделиться

3 ответа

На самом деле "второго" предмета как такового нет. У вас есть предмет, и вы просто кладете его в другое место. Элементы вокруг него соответственно меняют свое положение. Если вы хотите получить массив всех элементов, вы можете использовать метод toArray .

5
ответ дан 30 November 2019 в 21:45
поделиться

Попробуйте использовать функцию 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, если он находится в начале списка.

6
ответ дан 30 November 2019 в 21:45
поделиться

взгляните на плагин jQuery "Swapable":

http://plugins.jquery.com/project/Swapable

Он похож на "Sortable", но затрагиваются только два элемента выбранной группы: перетаскиваемый элемент и отбрасываемый элемент, который поменяны местами. Все остальные элементы остаются на своих текущих позициях. Этот плагин построен на основе существующего плагина jQuery «Сортировка» и наследует все параметры сортировки.

6
ответ дан 30 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: