В этой главе вы узнаете, как добавлять и удалять узлы HTML DOM (HTML элементы).
Создание новых HTML элементов (узлов)
Чтобы добавить новый элемент в дерево HTML DOM, сначала нужно его создать, а затем присоединить его к существующему элементу.
Пример:
<div id="div1">
<p id="p1">Это параграф.</p>
<p id="p2">Это другой параграф.</p>
</div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("Это новый параграф.");
para.appendChild(node);
var element = document.getElementById("div1");
element.appendChild(para);
</script>
Объяснение примера
Сначала создается новый элемент (узел элемента) <p>:
var para = document.createElement("p");
Чтобы добавить текст в элемент <p>, сначала нужно создать текстовый узел. Что мы и делаем:
var node = document.createTextNode("Это новый параграф.");
Затем необходимо присоединить текстовый узел к элементу <p>:
para.appendChild(node);
И, наконец, нужно присоединить новый элемент к существующему.
Мы находим требуемый существующий элемент:
var element = document.getElementById("div1");
И присоединяем к нему наш новый элемент:
element.appendChild(para);
Создание новых HTML элементов - insertBefore()
Метод appendChild() в предыдущем примере присоединяет новый элемент, как последний потомок.
Если вам нужен противоположный результат, то вы можете воспользоваться методом insertBefore():
<div id="div1">
<p id="p1">Это параграф.</p>
<p id="p2">Это другой параграф.</p>
</div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("Это новый параграф.");
para.appendChild(node);
var element = document.getElementById("div1");
var child = document.getElementById("p1");
element.insertBefore(para, child);
</script>
Удаление существующих HTML элементов
Чтобы удалить HTML элемент, вы должны знать его родительский элемент:
<div id="div1">
<p id="p1">Это параграф.</p>
<p id="p2">Это другой параграф.</p>
</div>
<script>
var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.removeChild(child);
</script>
Внимание! В спецификации DOM 4 реализован метод node.remove(). Однако из-за слабой поддержки браузерами, вам не следует его использовать.
Объяснение примера
Этот HTML документ содержит элемент <div> с двумя узлами потомками (два элемента <p>):
<div id="div1">
<p id="p1">Это параграф.</p>
<p id="p2">Это другой параграф.</p>
</div>
Найдем элемент с id="div1":
var parent = document.getElementById("div1");
Найдем элемент <p> с id="p1":
var child = document.getElementById("p1");
Удалим потомка у родителя:
parent.removeChild(child);
Конечно, было бы здорово иметь возможность просто удалить элемент, не ссылаясь на его родителя. Но, к сожалению, DOM так устроена, что ей нужно знать как сам элемент, который нужно удалить, так и его родителя.
Таким образом, имеем такую последовательность действий: находим элемент, который нужно удалить, и используем его свойство parentNode, чтобы определить его родителя:
var child = document.getElementById("p1");
child.parentNode.removeChild(child);
Замена HTML элементы
Чтобы заменить какой-либо элемент в HTML DOM, используется метод replaceChild():
<div id="div1">
<p id="p1">Это параграф.</p>
<p id="p2">Это другой параграф.</p>
</div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("Совсем новый параграф.");
para.appendChild(node);
var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.replaceChild(para, child);
</script>