为了学习如何更有效地做到这一点,我很好奇任何关于如何改进这一点的想法,或者我是否一起走错了路。
到目前为止,我已经写了,http://jsfiddle.net/mstefanko/LEjf8/9/
这基本上可以小规模处理我想要的。
有一些错误,我一点也不相信这是可以写的那么好,可能是一个不尝试锁定 jquery ui 可排序的白痴。但是由于需要在没有简单的项目列表的情况下执行此操作,并且希望将其扩展为包括多个拖放,我想至少了解我需要做些什么来实现这一点,即使它只是为了学习如何像这些工作的排序功能。
问题孩子,
这一切都在一个调用 droppable() 的 over 事件的函数中
我有一系列空位
    var emptyHolders = [];
    $('.pipeline-holder').each(function(){
        if($(this).hasClass('holder-empty')){
            var eid = $(this).attr('id');
            emptyHolders.push(eid.substring(14));
        }
    });
cid 是你在上面的可放置元素,所以我找到下一个打开的插槽使用
   for (var i = 0; i < emptyHolders.length; i++) {
        var currentEmpty = emptyHolders[i];
        if (currentEmpty > cid) {
            nextEmpty = currentEmpty;
            i = emptyHolders.length;
        } else {
            prevEmpty = parseInt(currentEmpty);
        }
    }
如果列表下方有一个空槽,我使用 for 循环循环移动 DOM 周围的项目,以腾出放置元素所需的空间。
 if (nextEmpty != null) {
        var moveMe = nextEmpty -1;
        for (var i = moveMe; i >= cid; i--) {
            var nextcount = i + 1;
            var me = $('#pipeline-rank-' + i);       
            var next = $('#pipeline-rank-' + i).parents('.pipeline-rank-row').next().find('.pipeline-holder');
            var pid = $('#pipeline-rank-' + i).find('.content-wrapper').attr('id');
            next.append($('#pipeline-rank-' + i).find('.content-wrapper'));
            next.removeClass('holder-empty');
            next.siblings('.remember-my-position-hover').html(pid);
        }
         $('#pipeline-rank-' + cid).addClass('holder-empty');
    } 
如果列表下方没有一个,我会反向执行相同的操作,以检查 droppable 上方是否有一个点可以将项目向上推入。
任何想法都非常感谢!