Создание, добавление и удаление элементов веб-станицы

Для создания элементов объект document имеет следующие методы:

var elem = document.createElement("div");
var elemText = document.createTextNode("Привет мир");
Таким образом, переменная elem будет хранить ссылку на элемент div. Однако одного создания элементов недостаточно, их еще надо добавить на веб-страницу.

Для добавления элементов мы можем использовать один из методов объекта Node: Используем метод appendChild:

Заголовок статьи

Первый абзац

Второй абзац



Сначала создаем обычный элемент заголовка h2 и текстовый узел. Затем текстовый узел добавляем в элемент заголовка. Затем заголовок добавляем в один из элементов веб-страницы:

Добавление элемента в JavaScript

Однако нам необязательно для определения текста внутри элемента создавать дополнительный текстовый узел, так как мы можем воспользоваться свойством textContent и напрямую ему присвоить текст:

var elem = document.createElement("h2");
elem.textContent = "Привет мир";
В этом случае текстовый узел будет создан неявно при установке текста.

Теперь рассмотрим, как аналогичный элемент добавить в начало коллекции дочерних узлов блока div:
var articleDiv = document.querySelector("div.article");
// создаем элемент
var elem = document.createElement("h2");
// создаем для него текст
var elemText = document.createTextNode("Привет мир");
// добавляем текст в элемент в качестве дочернего элемента
elem.appendChild(elemText);
// получаем первый элемент, перед которым будет идти добавление
var firstElem = articleDiv.firstChild.nextSibling;
// добавляем элемент в блок div перед первым узлом
articleDiv.insertBefore(elem, firstElem);
Если нам надо вставить новый узел на второе, третье или любое другое место, то нам надо найти узел, перед которым надо вставлять, с помощью комбинаций свойств firstChild/lastChild и nextSibling/previousSibling.

Копирование элемента

Иногда элементы бывают довольно сложными по составу, и гораздо проще их скопировать, чем с помощью отдельных вызовов создавать из содержимое. Для копирования уже имеющихся узлов у объекта Node можно использовать метод cloneNode():

var articleDiv = document.querySelector("div.article");
// клонируем элемент articleDiv
var newArticleDiv = articleDiv.cloneNode(true);
// добавляем в конец элемента body
document.body.appendChild(newArticleDiv);
В метод cloneNode() в качестве параметра передается логическое значение: если передается true, то элемент будет копироваться со всеми дочерними узлами; если передается false - то копируется без дочерних узлов. То есть в данном случае мы копируем узел со всем его содержимым и потом добавляем в конец элемента body.

Удаление элемента

Для удаления элемента вызывается метод removeChild() объекта Node. Этот метод удаляет один из дочерних узлов:

var articleDiv = document.querySelector("div.article");
// находим узел, который будем удалять - первый параграф
var removableNode = document.querySelectorAll("div.article p")[0];
// удаляем узел
articleDiv.removeChild(removableNode);
В данном случае удаляется первый параграф из блока div

Замена элемента

Для замены элемента применяется метод replaceChild(newNode, oldNode) объекта Node. Этот метод в качестве первого параметра принимает новый элемент, который заменяет старый элемент oldNode, передаваемый в качестве второго параметра.

var articleDiv = document.querySelector("div.article");
// находим узел, который будем заменять - первый параграф
var oldNode = document.querySelectorAll("div.article p")[0];
// создаем элемент
var newNode = document.createElement("h2");
// создаем для него текст
var elemText = document.createTextNode("Привет мир");
// добавляем текст в элемент в качестве дочернего элемента
newNode.appendChild(elemText);
// заменяем старый узел новым
articleDiv.replaceChild(newNode, oldNode);
В данном случае заменяем первый параграф заголовком h2: Output