Đây là câu trả lời dựa trên @lotif logic câu trả lời của , nhưng khái quát hơn một chút
Nếu bạn chắp thêm / trả trước sau / trước khi các phần tử thực sự được di chuyển
=> không cần sao chép
=> các sự kiện được giữ
Có hai trường hợp có thể xảy ra
- Một mục tiêu có cái gì đó "
.prev()
ious" => chúng ta có thể đặt mục tiêu khác .after()
đó.
- Một mục tiêu là con đầu tiên của nó
.parent()
=> chúng ta có thể .prepend()
nhắm mục tiêu khác vào cha mẹ.
Mật mã
Mã này có thể được thực hiện thậm chí ngắn hơn, nhưng tôi giữ nó theo cách này để dễ đọc. Lưu ý rằng cha mẹ uy tín (nếu cần) và các yếu tố trước đó là bắt buộc.
$(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 );
});
... hãy thoải mái bọc mã bên trong trong một hàm :)
Ví dụ fiddle có thêm các sự kiện nhấp chuột kèm theo để thể hiện bảo toàn sự kiện ...
Ví dụ fiddle: https://jsfiddle.net/ewroodqa/
... sẽ hoạt động cho nhiều trường hợp khác nhau - thậm chí một trường hợp như:
<div>
<div id="one">ONE</div>
</div>
<div>Something in the middle</div>
<div>
<div></div>
<div id="two">TWO</div>
</div>