如何将元素移动到另一个元素?
我想在另一个DIV元素中移动一个DIV元素。 例如,我想移动这个(包括所有的孩子):
<div id="source"> ... </div>
进入这个:
<div id="destination"> ... </div>
所以我有这个:
<div id="destination"> <div id="source"> ... </div> </div>
您可能想要使用appendTo
函数(添加到元素的末尾):
$("#source").appendTo("#destination");
或者,您可以使用prependTo
函数(添加到元素的开头):
$("#source").prependTo("#destination");
我的解决scheme
移动:
jQuery("#NodesToMove").detach().appendTo('#DestinationContainerNode')
复制:
jQuery("#NodesToMove").appendTo('#DestinationContainerNode')
请注意.detach()的用法。 复制时请注意不要复制ID。
我只是用了:
$('#source').prependTo('#destination');
我从这里抓到的
如果您要放置元素的div
在内部有内容,并且您希望元素在主要内容之后显示:
$("#destination").append($("#source"));
如果您要放置元素的div
在其中包含内容,并且您希望在主要内容之前显示元素:
$("#destination").prepend($("#source"));
如果你想把你的元素的div
是空的,或者你想完全replace它:
$("#element").html('<div id="source">...</div>');
如果你想复制上面的任何一个元素:
$("#destination").append($("#source").clone()); // etc.
那么JavaScript解决scheme呢?
声明一个片段:
var fragment = document.createDocumentFragment();
将所需的元素追加到片段中:
fragment.appendChild(document.getElementById('source'));
追加片段到所需的元素:
document.getElementById('destination').appendChild(fragment);
一探究竟。
您可以使用:
插入后,
jQuery("#source").insertAfter("#destination");
要插入另一个元素,
jQuery("#source").appendTo("#destination");
如果您想要快速演示以及有关如何移动元素的更多详细信息,请尝试以下链接:
http://html-tuts.com/move-div-in-another-div-with-jquery
这里是一个简短的例子:
向上移动一个元素:
$('.whatToMove').insertBefore('.whereToMove');
在元素之后移动:
$('.whatToMove').insertAfter('.whereToMove');
要在元素内部移动,请在该容器内的所有元素上面:
$('.whatToMove').prependTo('.whereToMove');
要在元素内移动,在该容器内的所有元素之后:
$('.whatToMove').appendTo('.whereToMove');
您可以使用以下代码将源移动到目标
jQuery("#source") .detach() .appendTo('#destination');
尝试工作codepen
function move() { jQuery("#source") .detach() .appendTo('#destination'); }
#source{ background-color:red; color: #ffffff; display:inline-block; padding:35px; } #destination{ background-color:blue; color: #ffffff; display:inline-block; padding:50px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="source"> I am source </div> <div id="destination"> I am destination </div> <button onclick="move();">Move</button>
曾尝试普通的JavaScript … destination.appendChild(source);
?
onclick = function(){ destination.appendChild(source); }
div{ margin: .1em; } #destination{ border: solid 1px red; } #source {border: solid 1px gray; }
<!DOCTYPE html> <html> <body> <div id="destination"> ### </div> <div id="source"> *** </div> </body> </html>
老问题,但到这里,因为我需要将内容从一个容器移动到另一个包括所有事件监听器 。
jQuery没有办法做,但标准的DOM函数appendChild做。
//assuming only one .source and one .target $('.source').on('click',function(){console.log('I am clicked');}); $('.target')[0].appendChild($('.source')[0]);
使用appendChild删除.source并将其放置到包括事件侦听器的目标中: https : //developer.mozilla.org/en-US/docs/Web/API/Node.appendChild
我注意到insertAfter&after或insertBefore&before之间存在巨大的内存泄漏和性能差异。如果您有大量DOM元素,或者您需要在MouseMove事件中使用after()或before(),则浏览器内存可能会增加,接下来的操作会运行得非常慢。 我刚刚遇到的解决scheme是使用inserBefore而不是before()和insertAfter而不是()之后。
你也可以尝试:
$("#destination").html($("#source"))
但是这将完全覆盖#destination
。