В попытке сделать мой ответ более гибким на this вопрос:JavaScript InsertBefore не работает должным образом
function invertDivs(parentDiv) {
var first = document.getElementById(parentDiv).firstChild;
console.log(first);
var second = document.getElementById(parentDiv).lastChild;
console.log(second);
document.getElementById(parentDiv).insertBefore(second, first);
}
<div id="parent">
<div id="first">Div 1</div>
<div id="second">Div 2</div>
</div>
<button onclick="invertDivs('parent');">Invert Divs</button>
Однако дивы только перевернутый иногда, не всегда.
Начальный щелчок на выходах кнопки это на консоли:
Второй щелчок:
После кучу кликов:
Я смущен, что не так с кодом. Я выбираю первый родительский родительский div и делаю то же самое для последнего ребенка. Затем я просто вставляю текущий второй div перед первым. Это конец функции. Они также являются прямыми дочерними элементами родительского div, как требуется функцией insertBefore
.
Имейте в виду, что текстовые узлы также являются дочерними узлами. Я предполагаю, что вы хотите использовать ['firstElementChild'] (https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/firstElementChild) или' childNodes [0] '. –
Каждое из белых пространств в вашем «HTML» будет считаться «текстовым узлом». Вы можете не столкнуться с проблемой, когда избавляетесь от всех пробелов в своем HTML. Но это боль. Вместо этого вам нужно проверить «nodeValue». '1' - это узел элемента, а' 3' - текстовый узел. Поэтому вам нужно добавить дополнительные проверки, чтобы избежать обработки '1'''. –