Сортируемый пользовательский интерфейс jQuery возвращает ul, но я действительно хочу получить два li - PullRequest
1 голос
/ 19 мая 2011

Я использую jQuery UI sorttable , чтобы позволить пользователю перетасовать список, но событие stop возвращает весь список.

Итак, я обрабатываю:

$(this).children('li').each(function(index) {

Но я действительно хочу обработать только затронутый диапазон.Я полагаю, что мне нужно: элемент списка, который перетаскивается, и элемент списка, который он помещает до (или после, что всегда удобно).Таким образом, я могу обновить диапазон в списке, на который влияют, и не должен обновлять весь список.

Может быть, мне просто нужно добавить атрибут Data-Counter для каждого элемента списка и посмотреть, если ониотличается от индекса.

1 Ответ

5 голосов
/ 19 мая 2011

Вы можете легко разобраться, если сохраните начальную позицию элемента при начале перетаскивания.

$('ul').sortable({
    start: function(event,ui){
        ui.item.data('index',ui.item.index());
    },
    stop: function(event,ui){
        var startIndex = parseInt(ui.item.data('index'),10);
        var stopIndex = ui.item.index();

        var msg = '';
        msg += 'id of item: ' + ui.item.attr('id') + '\n';
        msg += 'start index: ' + startIndex + '\n';
        msg += 'stop index: ' + stopIndex + '\n';
        msg += 'prev item id: ' + ui.item.prev().attr('id') + '\n';
        msg += 'next item id: ' + ui.item.next().attr('id') + '\n';

        alert(msg);
    }
});

Попробуйте мою демонстрацию: http://jsfiddle.net/b8uJ8/

...