Let\'s say I have three Trivial with jQuery If you want to do it repeatedly, you'll need to use different selectors since the divs will retain their ids as they are moved around. This function may seem strange, but it heavily relies on standards in order to function properly. In fact, it may seem to function better than the jQuery version that tvanfosson posted which seems to do the swap only twice. What standards peculiarities does it rely on? insertBefore
Inserts the node newChild before the existing child node refChild. If
refChild is null, insert newChild at
the end of the list of children.
If newChild is a DocumentFragment object, all of its children are
inserted, in the same order, before
refChild. If the newChild is already
in the tree, it is first removed. and use it like this: if you don't want to use jQuery you could easily adapt the function. Use modern vanilla JS! Way better/cleaner than previously. No need to reference a parent. Browser Support - 95% Global as of Oct '20 Jquery approach mentioned on the top will work.
You can also use JQuery and CSS .Say for e.g on Div one you have applied class1 and div2 you have applied class class2 (say for e.g each class of css provides specific position on the browser), now you can interchange the classes use jquery or javascript (that will change the position) Sorry for bumping this thread
I stumbled over the "swap DOM-elements" problem and played around a bit The result is a jQuery-native "solution" which seems to be really pretty (unfortunately i don't know whats happening at the jQuery internals when doing this) The Code: The jQuery documentation says that
$('#div1').insertAfter('#div3');
$('#div3').insertBefore('#div2');
$(function() {
setInterval( function() {
$('div:first').insertAfter($('div').eq(2));
$('div').eq(1).insertBefore('div:first');
}, 3000 );
});
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.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');
.before and .after
const div1 = document.getElementById("div1");
const div2 = document.getElementById("div2");
const div3 = document.getElementById("div3");
div2.after(div1);
div2.before(div3);
$('#element1').insertAfter($('#element2'));
insertAfter()
moves the element and doesn't clone it