Comment déplacer un élément dans un autre élément?

je voudrais déplacer un élément DIV à l'intérieur d'un autre. Par exemple, je veux déplacer ceci (y compris tous les enfants):

<div id="source">
...
</div>

dans ceci:

<div id="destination">
...
</div>

pour que j'ai ceci:

<div id="destination">
  <div id="source">
    ...
  </div>
</div>
1455
demandé sur BoltClock 2009-08-15 00:14:45

13 réponses

vous pouvez utiliser la fonction appendTo (qui ajoute à la fin de l'élément):

$("#source").appendTo("#destination");

vous pouvez aussi utiliser la fonction prependTo (qui ajoute au début de l'élément):

$("#source").prependTo("#destination");

exemple:

$("#appendTo").click(function() {
  $("#moveMeIntoMain").appendTo($("#main"));
});
$("#prependTo").click(function() {
  $("#moveMeIntoMain").prependTo($("#main"));
});
#main {
  border: 2px solid blue;
  min-height: 100px;
}

.moveMeIntoMain {
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main">main</div>
<div id="moveMeIntoMain" class="moveMeIntoMain">move me to main</div>

<button id="appendTo">appendTo main</button>
<button id="prependTo">prependTo main</button>
1605
répondu Andrew Hare 2018-02-26 00:32:45

ma solution:

MOVE:

jQuery("#NodesToMove").detach().appendTo('#DestinationContainerNode')

COPY:

jQuery("#NodesToMove").appendTo('#DestinationContainerNode')

noter l'usage de .détacher.)( Lorsque vous copiez, veillez à ne pas dupliquer des pièces D'identité.

792
répondu Alejandro Illecas 2015-10-22 09:29:18

je viens d'utiliser:

$('#source').prependTo('#destination');

que j'ai saisi dans ici .

105
répondu kjc26ster 2015-07-24 14:55:51

si le div où vous voulez placer votre élément a du contenu à l'intérieur, et vous voulez que l'élément affiche après le contenu principal:

  $("#destination").append($("#source"));

Si le div où vous voulez mettre votre élément est contenu à l'intérieur, et vous voulez montrer à l'élément avant le contenu principal:

$("#destination").prepend($("#source"));

Si le div où vous voulez mettre votre élément est vide, ou si vous voulez à remplacer it entièrement:

$("#element").html('<div id="source">...</div>');

si vous voulez dupliquer un élément avant l'un des éléments ci-dessus:

$("#destination").append($("#source").clone());
// etc.
85
répondu sbaaaang 2016-06-22 23:05:38

Qu'en est-il de la solution JavaScript ?

déclare un fragment:

var fragment = document.createDocumentFragment();

ajouter l'élément désiré au fragment:

fragment.appendChild(document.getElementById('source'));

ajouter fragment à l'élément désiré:

document.getElementById('destination').appendChild(fragment);

Check it out.

68
répondu Ali Bassam 2015-11-15 20:04:53

vous pouvez utiliser:

Pour Insérer Après,

jQuery("#source").insertAfter("#destination");

pour insérer à l'intérieur d'un autre élément,

jQuery("#source").appendTo("#destination");
27
répondu Subrahmanyam 2013-06-24 11:00:42

a déjà essayé le 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>
19
répondu Bekim Bacaj 2017-07-23 13:44:19

vous pouvez utiliser le code suivant pour déplacer la source à destination

 jQuery("#source")
       .detach()
       .appendTo('#destination');

travailler 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>
16
répondu Subodh Ghulaxe 2015-11-02 08:49:15

si vous voulez une démo rapide et plus de détails sur la façon dont vous déplacez des éléments, essayez ce lien:

http://html-tuts.com/move-div-in-another-div-with-jquery


voici un petit exemple:

pour se déplacer au-dessus d'un élément:

$('.whatToMove').insertBefore('.whereToMove');

pour se déplacer après un élément:

$('.whatToMove').insertAfter('.whereToMove');

Pour se déplacer à l'intérieur d'un élément, au-DESSUS de TOUS les éléments à l'intérieur de ce conteneur:

$('.whatToMove').prependTo('.whereToMove');

pour se déplacer à l'intérieur d'un élément, après tous les éléments à l'intérieur de ce conteneur:

$('.whatToMove').appendTo('.whereToMove');
15
répondu Dan 2015-02-17 22:03:13

vieille question mais est arrivé ici parce que je dois déplacer le contenu d'un conteneur à un autre y compris tous les écouteurs d'événement .

jQuery n'a pas le moyen de le faire, mais la fonction DOM standard d'appendChild le fait.

//assuming only one .source and one .target
$('.source').on('click',function(){console.log('I am clicked');});
$('.target')[0].appendChild($('.source')[0]);

utilisant appendChild enlève le .source et le place dans la cible, y compris ses auditeurs d'événements: https://developer.mozilla.org/en-US/docs/Web/API/Node.appendChild

10
répondu HMR 2014-12-24 04:06:40

vous pouvez aussi essayer:

$("#destination").html($("#source"))

mais cela va complètement écraser tout ce que vous avez dans #destination .

5
répondu Tamas 2015-07-24 14:41:09

j'ai remarqué une énorme fuite de mémoire et la différence de performance entre insertAfter & after ou insertBefore & before .. Si vous avez des tonnes d'éléments DOM, ou si vous devez utiliser after() ou before() à l'intérieur d'un événement MouseMove, la mémoire du navigateur va probablement augmenter et les prochaines opérations seront vraiment lentes. La solution que je viens d'expérimenter est d'utiliser inserBefore à la place de() et insertAfter à la place de().

4
répondu spetsnaz 2014-08-23 21:24:52

pour des raisons d'exhaustivité, il y a une autre approche wrap() ou wrapAll() mentionnée dans cet article . Ainsi, la question de L'OP pourrait éventuellement être résolue par ceci (c'est - à-dire, en supposant que le <div id="destination" /> n'existe pas encore, l'approche suivante va créer une telle enveloppe à partir de zéro-L'OP n'était pas clair si l'enveloppe existe déjà ou non):

$("#source").wrap('<div id="destination" />')
// or
$(".source").wrapAll('<div id="destination" />')

cela semble prometteur. Cependant, quand j'ai essayé de faire $("[id^=row]").wrapAll("<fieldset></fieldset>") sur la structure imbriquée multiple comme ceci:

<div id="row1">
    <label>Name</label>
    <input ...>
</div>

il enroule correctement ces <div>...</div> et <input>...</input> mais en quelque sorte omet le <label>...</label> . Donc j'ai fini par utiliser le $("row1").append("#a_predefined_fieldset") explicite à la place. Alors, YMMV.

0
répondu RayLuo 2018-09-04 07:18:14