Использование 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, чтобы включить теги абзацев или удалить пробелы.
Ответы
Ответ 1
Нет, insertBefore
будет работать с текстом node как node, который будет вставлен раньше. Проблема в том, что node, который вы пытаетесь вставить раньше, не является дочерним элементом node, который вы вставляете. Вам нужно удалить бит .parentNode
:
newParent.insertBefore(moveable, newParent.firstChild);
Ответ 2
Вам нужно удалить ".parentNode" из инструкции insert. Текст node по-прежнему является node и может ссылаться как на все остальные node.