Bu, @lotif'in cevap mantığına dayanan bir cevaptır , ancak biraz daha genelleştirilmiş
Öğeler taşındıktan
sonra / sonrasına ekler / başa eklerseniz
=> klonlamaya gerek yoktur
=> olaylar saklanır
Olabilecek iki durum var
- Bir hedefte "
.prev()
ious" => başka bir hedef .after()
olabilir.
- Bir hedef onun ilk çocuğudur
.parent()
=> .prepend()
diğerini ebeveyn olarak yapabiliriz.
KOD
Bu kod daha kısa yapılabilirdi, ancak okunabilirlik için bu şekilde sakladım. Ebeveynleri (gerekiyorsa) ve önceki öğeleri önceden doldurmanın zorunlu olduğunu unutmayın.
$(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 );
});
... iç kodu bir fonksiyona sarmaktan çekinmeyin :)
Örnek kemanın olay korumasını göstermek için ek tıklama olayları eklenmiştir ...
Örnek keman: https://jsfiddle.net/ewroodqa/
... çeşitli durumlarda çalışacak - hatta aşağıdakiler gibi:
<div>
<div id="one">ONE</div>
</div>
<div>Something in the middle</div>
<div>
<div></div>
<div id="two">TWO</div>
</div>