Используя 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 отделение в #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, чтобы включать теги абзаца или удалить пробел.

12
задан Melissa Avery-Weir 28 July 2010 в 12:36
поделиться

2 ответа

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

newParent.insertBefore(moveable, newParent.firstChild); 
13
ответ дан 2 December 2019 в 20:39
поделиться

Вам необходимо удалить ".parentNode" из вашего оператора вставки. Текстовый узел по-прежнему является узлом, и на него можно ссылаться, как на любой другой узел.

2
ответ дан 2 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: