นี่คือคำตอบตาม@lotifตรรกะการตอบของแต่เป็นการวางนัยทั่วไปมากกว่า
หากคุณต่อท้าย / เสริมหลัง / ก่อนที่องค์ประกอบจะถูกย้าย
จริง
=> ไม่จำเป็นต้องมีการโคลน
=> เหตุการณ์ที่เก็บไว้
มีสองกรณีที่สามารถเกิดขึ้นได้
- เป้าหมายหนึ่งมีบางอย่าง "
.prev()
ious" => เราสามารถใส่เป้าหมายอื่น.after()
ได้
- เป้าหมายหนึ่งคือลูกคนแรกของมัน
.parent()
=> เราสามารถ.prepend()
กำหนดเป้าหมายอื่นให้กับผู้ปกครองได้
รหัส
รหัสนี้สามารถทำได้สั้นกว่านี้ แต่ฉันเก็บไว้เพื่อความสะดวกในการอ่าน ทราบว่าผู้ปกครอง prestoring (ถ้าจำเป็น) และองค์ประกอบก่อนหน้านี้เป็นสิ่งจำเป็น
$(function(){
var $one = $("#one");
var $two = $("#two");
var $onePrev = $one.prev();
if( $onePrev.length < 1 ) var $oneParent = $one.parent();
var $twoPrev = $two.prev();
if( $twoPrev.length < 1 ) var $twoParent = $two.parent();
if( $onePrev.length > 0 ) $onePrev.after( $two );
else $oneParent.prepend( $two );
if( $twoPrev.length > 0 ) $twoPrev.after( $one );
else $twoParent.prepend( $one );
});
... รู้สึกอิสระในการห่อโค้ดด้านในฟังก์ชั่น :)
ตัวอย่างซอมีการคลิกเหตุการณ์พิเศษที่แนบมาเพื่อแสดงให้เห็นถึงการเก็บรักษาเหตุการณ์ ...
ตัวอย่างซอ: https://jsfiddle.net/ewroodqa/
... จะใช้งานได้ในหลายกรณี - แม้แต่กรณีเดียวเช่น:
<div>
<div id="one">ONE</div>
</div>
<div>Something in the middle</div>
<div>
<div></div>
<div id="two">TWO</div>
</div>