Ini adalah jawaban berdasarkan @lotif logika jawaban , tetapi sedikit lebih umum
Jika Anda menambahkan / menambahkan setelah / sebelum elemen benar-benar dipindahkan
=> tidak ada clonning yang diperlukan
=> acara disimpan
Ada dua kasus yang bisa terjadi
- Satu target memiliki sesuatu "
.prev()
ious" => kita dapat menempatkan target lain .after()
itu.
- Satu target adalah anak pertama dari itu
.parent()
=> kita dapat .prepend()
target lain untuk orang tua.
Kode
Kode ini dapat dilakukan lebih pendek, tetapi saya tetap menggunakan cara ini agar mudah dibaca. Perhatikan bahwa orangtua yang berprestasi (jika perlu) dan elemen sebelumnya adalah wajib.
$(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 );
});
... jangan ragu untuk membungkus kode bagian dalam suatu fungsi :)
Contoh biola memiliki acara klik ekstra terlampir untuk menunjukkan pelestarian acara ...
Contoh biola: https://jsfiddle.net/ewroodqa/
... akan bekerja untuk berbagai kasus - bahkan satu seperti:
<div>
<div id="one">ONE</div>
</div>
<div>Something in the middle</div>
<div>
<div></div>
<div id="two">TWO</div>
</div>