जवाबों:
JQuery के साथ तुच्छ
$('#div1').insertAfter('#div3');
$('#div3').insertBefore('#div2');
यदि आप इसे बार-बार करना चाहते हैं, तो आपको अलग-अलग चयनकर्ताओं का उपयोग करने की आवश्यकता होगी क्योंकि डिव अपने आईडी को बनाए रखेंगे क्योंकि वे चारों ओर चले गए हैं।
$(function() {
setInterval( function() {
$('div:first').insertAfter($('div').eq(2));
$('div').eq(1).insertBefore('div:first');
}, 3000 );
});
var html = $('#container').html(); ...; $('#container').html(html);
ऐसे तुच्छ कार्य के लिए पुस्तकालय का उपयोग करने की कोई आवश्यकता नहीं है:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[2].parentNode.insertBefore(divs[2], divs[0]); // order: third, first, second
divs[2].parentNode.insertBefore(divs[2], divs[1]); // order: third, second, first
यह इस तथ्य पर ध्यान getElementsByTagName
देता है कि एक जीवित नोडलिस्ट को लौटाता है जो डोम में तत्वों के आदेश को प्रतिबिंबित करने के लिए स्वचालित रूप से अपडेट किया जाता है क्योंकि उन्हें हेरफेर किया गया है।
आप यह भी उपयोग कर सकते हैं:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[0].parentNode.appendChild(divs[0]); // order: second, third, first
divs[1].parentNode.insertBefore(divs[0], divs[1]); // order: third, second, first
और कई अन्य संभावित क्रमपरिवर्तन हैं, यदि आपको लगता है कि प्रयोग करना है:
divs[0].parentNode.appendChild(divs[0].parentNode.replaceChild(divs[2], divs[0]));
उदाहरण के लिए :-)
आधुनिक वेनिला JS का उपयोग करें! पहले की तुलना में बेहतर / स्वच्छ तरीका। माता-पिता को संदर्भित करने की आवश्यकता नहीं है।
const div1 = document.getElementById("div1");
const div2 = document.getElementById("div2");
const div3 = document.getElementById("div3");
div2.after(div1);
div2.before(div3);
ब्राउज़र समर्थन - जुलाई '20 तक 94.23% ग्लोबल
jQuery.fn.swap = function(b){
b = jQuery(b)[0];
var a = this[0];
var t = a.parentNode.insertBefore(document.createTextNode(''), a);
b.parentNode.insertBefore(a, b);
t.parentNode.insertBefore(b, t);
t.parentNode.removeChild(t);
return this;
};
और इसे इस तरह उपयोग करें:
$('#div1').swap('#div2');
यदि आप jQuery का उपयोग नहीं करना चाहते हैं तो आप आसानी से फ़ंक्शन को अनुकूलित कर सकते हैं।
var swap = function () {
var divs = document.getElementsByTagName('div');
var div1 = divs[0];
var div2 = divs[1];
var div3 = divs[2];
div3.parentNode.insertBefore(div1, div3);
div1.parentNode.insertBefore(div3, div2);
};
यह फ़ंक्शन अजीब लग सकता है, लेकिन यह ठीक से काम करने के लिए मानकों पर बहुत अधिक निर्भर करता है। वास्तव में, यह jQuery के संस्करण से बेहतर कार्य करने के लिए लग सकता है जो कि tvanfosson ने पोस्ट किया है जो केवल दो बार स्वैप करने के लिए लगता है।
यह किस मानकों पर निर्भर करता है?
InsertBefore मौजूदा बच्चे नोड refChild से पहले नोड newCild सम्मिलित करता है। यदि रिफिल्ड शून्य है, तो बच्चों की सूची के अंत में न्यूचिल्ड डालें। यदि newChild एक डॉक्यूमेंटफ्रेगमेंट ऑब्जेक्ट है, तो उसके सभी बच्चे, उसी क्रम में, RefChild से पहले डाले जाते हैं। यदि न्यूचाइल्ड पहले से ही पेड़ में है, तो इसे पहले हटा दिया जाता है।
शीर्ष पर उल्लिखित jquery दृष्टिकोण काम करेगा। आप JQuery और CSS का भी उपयोग कर सकते हैं। उदाहरण के लिए Div पर, आपने class1 और div2 को लागू किया है, आपने वर्ग class2 लागू किया है (उदाहरण के लिए, css का प्रत्येक वर्ग ब्राउज़र पर विशिष्ट स्थिति प्रदान करता है), अब आप कक्षाओं का उपयोग जेकरी या उपयोग करके इंटरचेंज कर सकते हैं जावास्क्रिप्ट (वह स्थिति बदल जाएगी)
इस धागे को उछालने के लिए क्षमा करें, मैं "स्वैप डोम-एलिमेंट्स" समस्या पर लड़खड़ाया और थोड़ा इधर-उधर खेला
परिणाम एक jQuery- देशी "समाधान" है जो वास्तव में बहुत अच्छा लगता है (दुर्भाग्य से मुझे नहीं पता कि ऐसा करते समय jQuery के इंटर्नल में क्या हो रहा है)
कोड:
$('#element1').insertAfter($('#element2'));
JQuery प्रलेखन कहता है कि तत्व को insertAfter()
स्थानांतरित करता है और इसे क्लोन नहीं करता है