使用 jQuery UI 将一个元素拖到另一个元素上时交换元素

Posted

技术标签:

【中文标题】使用 jQuery UI 将一个元素拖到另一个元素上时交换元素【英文标题】:Swap elements when you drag one onto another using jQuery UI 【发布时间】:2011-11-29 08:05:53 【问题描述】:

我有一个页面上的元素排列:

<div>
  <div class="dragdrop" style="top:0px;  left: 0px;  ">1</div>
  <div class="dragdrop" style="top:40px; left: 0px;  ">2</div>
  <div class="dragdrop" style="top:60px; left: 0px;  ">3</div>
  <div class="dragdrop" style="top:0px;  left: 100px;">4</div>
  <div class="dragdrop" style="top:40px; left: 100px;">5</div>
  <div class="dragdrop" style="top:60px; left: 100px;">6</div>
</div>

如何使用 jQuery UI (Draggable / Droppable) 来实现,如果一个 div 被拖放到另一个 div 上,它们会交换位置? (如果它被拖到其他任何地方,它就会恢复到原来的位置。)

谢谢。

【问题讨论】:

这可能对你有帮助***.com/questions/4589606/… 【参考方案1】:

这是一个示例,说明如何通过拖放来交换元素http://jsfiddle.net/76yRN/1/

另一个关于jquery中交换元素的问题jQuery draggable items lose their draggability after being swapped (with jsfiddle example)

希望对你有帮助

【讨论】:

我在这个答案的基础上创建了一个交换 div 内容以从一开始就删除 javascript 的版本。 ***.com/a/42839376/7441661 谢谢!【参考方案2】:

您只需将元素从一个替换为另一个。前段时间我创建了一个演示,用于在 UL 列表之间交换元素。检查这个: http://www.authorcode.com/swap-elements-when-drag-one-onto-another-using-jquery-ui/

【讨论】:

【参考方案3】:

我使用了多种解决方案来实现这一点,#large_tiles 和 #small_tiles 是两个列表:

$(function() 
$("#large_tiles li, #small_tiles li").draggable(
    zIndex: 2,
    appendTo: "body",
);

initDroppable($("#large_tiles li, #small_tiles li"));

initSwap();
function initSwap() 
    initDroppable($("#large_tiles li, #small_tiles li"));
    initDraggable($("#large_tiles li, #small_tiles li"));

function initDraggable($elements) 
    $elements.draggable(
        zIndex: 2,
        appendTo: "body",
        helper: "clone",
        start: function(e, ui) 
            $(ui.helper).addClass("clone");
        ,
        cursorAt:  left:50, top:75 
    );

function initDroppable($elements) 
    $elements.droppable(
        activeClass: "active-tile",
        hoverClass: "hover-tile",
        over: function(event, ui) 
            var $this = $(this);
        ,
        drop: function(event, ui) 
            var $this = $(this);
            var linew1 = $(this).after(ui.draggable.clone());
            var linew2 = $(ui.draggable).after($(this).clone());
            $(ui.draggable).remove();
            $(this).remove();
            initSwap();
        
    );

);

【讨论】:

以上是关于使用 jQuery UI 将一个元素拖到另一个元素上时交换元素的主要内容,如果未能解决你的问题,请参考以下文章

ui jquery 可拖动元素

将图像拖到透明 png 后面

Jquery ui-sortable - 无法在空 tbody 中删除 tr

jquery ui可拖动可排序元素到iframe中

jquery - 如何让列表元素可排序并且也可拖动到另一个列表

使用jquery ui拖放后的动态div宽度