Pensando en otras formas de hacer esto, di con la siguiente: En lugar de clonar y mover el elemento a otra sección para, finalmente, eliminar el original, basta con moverlo, alterando los valores de su posición.
Código HTML:
Ver original<!DOCTYPE html>
<meta charset = "utf-8" /> <style type = "text/css"> #uno, #dos {
width: 12.5em;
height: 7em;
}
#uno {
background: #0f0;
}
#dos {
background: #f00;
}
div {
display: inline-block;
width: 5em;
height: 2em;
background: yellow;
text-align: center;
margin: .5em;
position: relative;
}
<div data-level = "1" id = "a"> 1
</div> <div data-level = "1" id = "b"> 2
</div> <div data-level = "1" id = "c"> 3
</div> <div data-level = "1" id = "d"> 4
</div>
<script type = "text/javascript" src = "http://code.jquery.com/jquery-1.10.2.js"></script> <script type = "text/javascript"> $("div").click(function () {
var data = this.getAttribute("data-level");
if (data == 1) this.setAttribute("data-level", 2);
else this.setAttribute("data-level", 1);
if (this.getAttribute("data-level") == 1)
$(this).animate({"top": "-=8em"}, 1200);
else
$(this).animate({"top": "+=8em"}, 1200);
});
A cada div, le asigné el atributo personalizado
data-level, el cual empieza con el valor 1, pero cada vez que le de un clic a cada div, dicho valor cambiará, si era 1, pasará a ser 2 y viceversa, con esto determinaremos si el div se mueve hacia arriba o hacia abajo.
Saludos