यह @lotif पर आधारित एक उत्तर है के उत्तर तर्क है, लेकिन थोड़ा अधिक सामान्यीकृत है
यदि आप तत्वों को वास्तव में स्थानांतरित करने
से पहले / बाद में जोड़ते हैं /
रोकते हैं => कोई क्लोनिंग की जरूरत नहीं है
= घटनाओं को रखा जाता है
दो मामले हैं जो हो सकते हैं
- एक लक्ष्य में कुछ "
.prev()
ious" => हम दूसरे लक्ष्य को रख सकते हैं .after()
।
- एक लक्ष्य यह का पहला बच्चा है
.parent()
=> हम .prepend()
माता-पिता को दूसरा लक्ष्य दे सकते हैं ।
कोड
यह कोड और भी छोटा किया जा सकता था, लेकिन मैंने इसे पठनीयता के लिए इस तरह से रखा। ध्यान दें कि माता-पिता को पुरस्कृत करना (यदि आवश्यक हो) और पिछले तत्व अनिवार्य हैं।
$(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>