Javascript 具有固定行的JQuery可排序

Javascript 具有固定行的JQuery可排序,javascript,jquery,jquery-ui,jquery-ui-sortable,Javascript,Jquery,Jquery Ui,Jquery Ui Sortable,在 本例中,项目3,5是固定的,但当我将项目7移动到项目3上方时,项目3将其位置更改为4,我希望它保持在第3位置(项目3和项目7)。用户可以拖放其余项目。 如何实现此功能 $(“#可排序”).sortable({ 取消:“.fixed”, 开始:功能(事件、用户界面){ var start_pos=ui.item.index(); ui.项目数据('最后一个位置',开始位置'); }, 更改:功能(事件、用户界面){ var last_pos=ui.item.data('last_pos'),

本例中,项目3,5是固定的,但当我将项目7移动到项目3上方时,项目3将其位置更改为4,我希望它保持在第3位置(项目3和项目7)。用户可以拖放其余项目。 如何实现此功能

$(“#可排序”).sortable({
取消:“.fixed”,
开始:功能(事件、用户界面){
var start_pos=ui.item.index();
ui.项目数据('最后一个位置',开始位置');
},
更改:功能(事件、用户界面){
var last_pos=ui.item.data('last_pos'),
index=ui.placeholder.index(),
options=$(this).data().sortable.options;
如果(最后位置>索引){
$(options.items,$(this)).slice(索引,最后位置+1).filter(options.cancel).每个(函数(ix){
$(this).prevAll().not('.ui可排序占位符').first().detach().insertAfter(this);
});
}否则如果(最后位置<索引){
$(options.items,$(this)).slice(最后位置,索引+1).过滤器(options.cancel).每个(函数(ix){
$(this).nextAll().not('.ui可排序占位符').first().detach().insertBefore(this);
});
}
ui.item.data('last_pos',ui.placeholder.index());
},
});
$(“#可排序”).disableSelection();
但是,如果任何固定项是第一个或最后一个,或者多个固定项在一行中,则该方法不起作用


我很抱歉,修改可排序模块需要完整的解决方案。需要防止占位符放在固定项目之间或项目列表的边缘。

围绕“固定”行的两个单独的排序表,并将它们连接到列表中?
$("#sortable").sortable({
    cancel: ".fixed"
});
$("#sortable").disableSelection(); 
$("#sortable").sortable({
    cancel: ".fixed",
    start: function(event, ui) {
        var start_pos = ui.item.index();
        ui.item.data('last_pos', start_pos);
    },
    change: function(event, ui) {
        var last_pos = ui.item.data('last_pos'),
            index = ui.placeholder.index(),
            options = $(this).data().sortable.options;
        if (last_pos > index) {
            $(options.items, $(this)).slice(index, last_pos + 1).filter(options.cancel).each(function(ix) {
                $(this).prevAll().not('.ui-sortable-placeholder').first().detach().insertAfter(this);
            });
        } else if (last_pos < index) {
            $(options.items, $(this)).slice(last_pos, index + 1).filter(options.cancel).each(function(ix) {
                $(this).nextAll().not('.ui-sortable-placeholder').first().detach().insertBefore(this);
            });
        }
        ui.item.data('last_pos', ui.placeholder.index());
    },
});
$("#sortable").disableSelection();