Мне нужна была функция, чтобы поменять местами два произвольных узла, сохраняя замененные элементы в одном месте в DOM. Например, если a находился в положении 2 относительно своего родителя, а b находился в положении 0 относительно своего родителя, b должен заменить позицию 2 из * 1007 Бывший родитель * a и a должны заменить дочернего 0 от прежнего родителя b .
Это мое решение, которое позволяет свопу находиться в совершенно разных частях дома. Обратите внимание, что обмен не может быть простым трехступенчатым обменом. Каждый из этих двух элементов должен быть сначала удален из DOM, потому что они могут иметь братьев и сестер, которые нуждаются в обновлении, и т. Д.
Решение: я вставил два div-элемента, чтобы удерживать место каждого узла, чтобы поддерживать относительный порядок родства. Затем я заново вставляю каждый из узлов в заполнитель другого, сохраняя относительное положение, которое было у обменного узла до обмена. (Мое решение похоже на решение Бака).
function swapDom(a,b)
{
var aParent = a.parentNode;
var bParent = b.parentNode;
var aHolder = document.createElement("div");
var bHolder = document.createElement("div");
aParent.replaceChild(aHolder,a);
bParent.replaceChild(bHolder,b);
aParent.replaceChild(b,aHolder);
bParent.replaceChild(a,bHolder);
}