У меня есть HTML как следующее:
<div id="move-me">
<a href="#">I'm a link</a>
</div>
<div id="new-parent">
Some plain text.
</div>
Я пытаюсь записать JavaScript, который переместит все #move-me отделение в #new-parent отделении, выше текста, как так:
<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
требует узла элемента и не будет работать над текстовым узлом... то право? Если так, есть ли другой хороший метод для того, чтобы сделать это?
Примечание: Я не могу изменить или очистить HTML, чтобы включать теги абзаца или удалить пробел.
Нет, insertBefore
будет нормально работать с текстовым узлом в качестве узла, который будет вставлен раньше. Проблема в том, что узел, который вы пытаетесь вставить раньше, не является потомком узла, в который вы вставляете. Вам необходимо удалить бит .parentNode
:
newParent.insertBefore(moveable, newParent.firstChild);
Вам необходимо удалить ".parentNode" из вашего оператора вставки. Текстовый узел по-прежнему является узлом, и на него можно ссылаться, как на любой другой узел.