Подтвердить что ты не робот

Использование JavaScript insertBefore() для вставки перед TextNode?

У меня есть HTML, как показано ниже:

<div id="move-me">
    <a href="#">I'm a link</a>
</div>

<div id="new-parent">
    Some plain text.
</div>

Я пытаюсь написать JavaScript, который будет перемещать весь # move-me div внутри # нового родительского div над текстом, например:

<div id="new-parent">
    <div id="move-me">
        <a href="#">I'm a link</a>
    </div>
    Some plain text.
</div>

Здесь у меня есть JavaScript:

function moveDiv() {
    var moveable = document.getElementById('move-me');
    var newParent = document.getElementById('new-parent');
    newParent.parentNode.insertBefore(moveable, newParent.firstChild);
}

Я использую Firebug для отладки, и я вижу, что newParent.firstChild - это TextNode, но я всегда получаю следующую ошибку:

Node was not found" code: "8
newParent.parentNode.insertBefore(moveable, newParent.firstChild); 

Кажется, что insertBefore требует элемент node и не будет работать над текстом node... это правильно? Если это так, есть ли еще один хороший способ для этого?

Примечание. Я не могу изменить или очистить HTML, чтобы включить теги абзацев или удалить пробелы.

4b9b3361

Ответ 1

Нет, insertBefore будет работать с текстом node как node, который будет вставлен раньше. Проблема в том, что node, который вы пытаетесь вставить раньше, не является дочерним элементом node, который вы вставляете. Вам нужно удалить бит .parentNode:

newParent.insertBefore(moveable, newParent.firstChild); 

Ответ 2

Вам нужно удалить ".parentNode" из инструкции insert. Текст node по-прежнему является node и может ссылаться как на все остальные node.