How to move an element into another element?
我想将一个DIV元素移动到另一个DIV元素中。例如,我要移动此项(包括所有子项):
1 | ... |
进入这个:
1 | ... |
所以我有了这个:
1 | ... |
您可能需要使用
1 | $("#source").appendTo("#destination"); |
或者,您可以使用
1 | $("#source").prependTo("#destination"); |
例子:
1 2 3 4 5 6 | $("#appendTo").click(function() { $("#moveMeIntoMain").appendTo($("#main")); }); $("#prependTo").click(function() { $("#moveMeIntoMain").prependTo($("#main")); }); |
1 2 3 4 5 6 7 8 | #main { border: 2px solid blue; min-height: 100px; } .moveMeIntoMain { border: 1px solid red; } |
1 2 3 4 5 6 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> main move me to main <button id="appendTo">appendTo main</button> <button id="prependTo">prependTo main</button> |
我的解决方案:
移动:
1 | jQuery("#NodesToMove").detach().appendTo('#DestinationContainerNode') |
复印件:
1 | jQuery("#NodesToMove").appendTo('#DestinationContainerNode') |
注意.detach()的用法。复制时,请注意不要复制ID。
我刚用过:
1 | $('#source').prependTo('#destination'); |
我从这里抓到的。
如果要放置元素的
1 | $("#destination").append($("#source")); |
如果要放置元素的
1 | $("#destination").prepend($("#source")); |
如果要放置元素的
1 | $("#element").html('...'); |
如果要在上述任何一项之前复制元素:
1 2 | $("#destination").append($("#source").clone()); // etc. |
JavaScript解决方案怎么样?
声明片段:
将所需元素附加到片段:
将片段附加到所需元素:
过来看。
你可以使用:
在后面插入,
1 | jQuery("#source").insertAfter("#destination"); |
要插入到另一个元素中,
1 | jQuery("#source").appendTo("#destination"); |
曾经尝试过简单的javascript…EDOCX1?9?
1 | onclick = function(){ destination.appendChild(source); } |
1 2 3 | div{ margin: .1em; } #destination{ border: solid 1px red; } #source {border: solid 1px gray; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE html> <html> <body> ### *** </body> </html> |
如果您想要快速演示和有关如何移动元素的详细信息,请尝试以下链接:
下面是一个简短的例子:
要在元素上方移动:
1 | $('.whatToMove').insertBefore('.whereToMove'); |
在元素之后移动:
1 | $('.whatToMove').insertAfter('.whereToMove'); |
要在某个元素内移动,请执行以下操作:首先在该容器内的所有元素内移动:
1 | $('.whatToMove').prependTo('.whereToMove'); |
要在一个元素内移动,在该容器内的所有元素之后:
1 | $('.whatToMove').appendTo('.whereToMove'); |
可以使用以下代码将源移动到目标
1 2 3 | jQuery("#source") .detach() .appendTo('#destination'); |
尝试工作代码笔
1 2 3 4 5 | function move() { jQuery("#source") .detach() .appendTo('#destination'); } |
1 2 3 4 5 6 7 8 9 10 11 12 | #source{ background-color:red; color: #ffffff; display:inline-block; padding:35px; } #destination{ background-color:blue; color: #ffffff; display:inline-block; padding:50px; } |
1 2 3 4 5 6 7 8 9 10 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> I am source I am destination <button onclick="move();">Move</button> |
这是一个老问题,但我来这里是因为我需要将内容从一个容器移动到另一个容器,包括所有事件侦听器。
jquery没有办法做到这一点,但标准的dom函数appendchild做到了。
1 2 3 | //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
您也可以尝试:
1 | $("#destination").html($("#source")) |
但这将完全覆盖您在
我注意到前后插入或前后插入之间存在巨大的内存泄漏和性能差异。如果您有大量的DOM元素,或者需要在mousemove事件中使用after()或before(),则浏览器内存可能会增加,下一个操作将运行得非常慢。我刚刚经历的解决方案是在()之前使用insertbefore,在()之后使用insertafter。
您可以使用纯javascript,使用
The appendChild() method appends a node as the last child of a node.
Tip: If you want to create a new paragraph, with text, remember to
create the text as a Text node which you append to the paragraph, then
append the paragraph to the document.You can also use this method to move an element from one element to
another.Tip: Use the insertBefore() method to insert a new child node before a
specified, existing, child node.
所以你可以这样做来完成这项工作,这是我为你创建的,使用
1 2 3 4 | function appendIt() { var source = document.getElementById("source"); document.getElementById("destination").appendChild(source); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #source { color: white; background: green; padding: 4px 8px; } #destination { color: white; background: red; padding: 4px 8px; } button { margin-top: 20px; } |
1 2 3 4 5 6 7 8 9 10 11 12 | <p> Source </p> <p> Destination </p> <button onclick="appendIt()">Move Element</button> |
为了完整起见,本文中还提到了另一种方法
1 2 3 | $("#source").wrap('') // or $(".source").wrapAll('') |
听起来很有希望。但是,当我尝试在这样的多个嵌套结构上执行
")时:
1 2 | <label>Name</label> <input ...> |
它正确地包装了那些