ईवेंट हैंडलर खोने या डोम संदर्भों को तोड़ने के बिना दो divs स्वैप करने के लिए, आप उन्हें केवल DOM में ले जा सकते हैं। कुंजी आंतरिक HTML को बदलने के लिए नहीं है क्योंकि यह नए डीओएम नोड्स को स्क्रैच से दोबारा शुरू करता है और उन डीओएम ऑब्जेक्ट्स पर सभी पूर्व ईवेंट हैंडलर खो जाते हैं।
लेकिन, यदि आप डीओएम तत्वों को डीओएम में एक नए स्थान पर ले जाते हैं, तो सभी घटनाएं संलग्न रहती हैं क्योंकि डीओएम तत्व केवल डीओएम तत्वों को बदलने के बिना ही पुनर्निर्मित होते हैं।
यहां एक त्वरित कार्य है जो डोम में दो तत्वों को स्वैप करेगा। के रूप में एक अन्य का एक बच्चा नहीं है यह लंबे समय के रूप में किसी भी दो तत्वों के साथ काम करना चाहिए:
function swapElements(obj1, obj2) {
// create marker element and insert it where obj1 is
var temp = document.createElement("div");
obj1.parentNode.insertBefore(temp, obj1);
// move obj1 to right before obj2
obj2.parentNode.insertBefore(obj1, obj2);
// move obj2 to right before where obj1 used to be
temp.parentNode.insertBefore(obj2, temp);
// remove temporary marker node
temp.parentNode.removeChild(temp);
}
आप इसे यहाँ काम देख सकते हैं: http://jsfiddle.net/jfriend00/NThjN/
और यहाँ एक संस्करण है कि अस्थायी बिना काम करता है तत्व डाला:
function swapElements(obj1, obj2) {
// save the location of obj2
var parent2 = obj2.parentNode;
var next2 = obj2.nextSibling;
// special case for obj1 is the next sibling of obj2
if (next2 === obj1) {
// just put obj1 before obj2
parent2.insertBefore(obj1, obj2);
} else {
// insert obj2 right before obj1
obj1.parentNode.insertBefore(obj2, obj1);
// now insert obj1 where obj2 was
if (next2) {
// if there was an element after obj2, then insert obj1 right before that
parent2.insertBefore(obj1, next2);
} else {
// otherwise, just append as last child
parent2.appendChild(obj1);
}
}
}
कार्य डेमो: http://jsfiddle.net/jfriend00/oq92jqrb/
मैं जोड़ सकता हूं कि यह कोड केवल एक ही है जो वास्तव में काम करता है, 2 कोने के मामलों को छोड़कर: n-first या n-last आइटम। – philk
@philk - मुझे नहीं पता कि किन कोने के मामलों में आपको लगता है कि काम नहीं करते हैं। कृपया समझाएँ। शायद एक jsFiddle दिखाओ। – jfriend00
वास्तव में यहां अच्छा काम है! प्रदर्शन के अनुसार, आप क्या करने का सुझाव देते हैं? – Jessica