Node.cloneNode()

Метод Node.cloneNode() возвращает дубликат узла, из которого этот метод был вызван.

Синтаксис

var dupNode = node.cloneNode(deep);
node

Узел, который будет клонирован.

dupNode

Новый узел, который будет клоном node

deep Необязательный

true, если дети узла должны быть клонированы или false для того, чтобы был клонирован только указанный узел.

Примечание: в спецификации DOM4 (как реализовано в Gecko 13.0), deep необязательный аргумент. Если он опущен, метод действует как если бы значение deep было true, по умолчанию используется глубокое клонирование. Для создания поверхностного клонирования, deep должен быть установлен как false.

Это поведение было изменено в последней спецификации, и если опущено значение, метод будет действовать как если бы deep было false. Хотя, это все ещё не обязательно, вы всегда должны обеспечить аргументом deep, для прямой и обратной совместимости. С Gecko 28.0), консоль предупреждает разработчиков не опускать аргумент. Начиная с Gecko 29.0), поверхностный клон, по умолчанию, вместо глубокого клона.

Пример

js
var p = document.getElementById("para1");
var p_prime = p.cloneNode(true);

Примечание

Клонирование узлов копирует все атрибуты и их значения, в том числе собственных (в линию) перехватчиков. Это не копирует перехватчики событий, добавленных используя addEventListener() (en-US) или тех что назначены через свойства элемента (т.е node.onclick = fn).

Дубликат узла, возвращённого cloneNode() не является частью документа, пока не будет добавлен в другой узел, который является частью документа, используя Node.appendChild() или другой метод. Кроме того, не имеет родителя, пока не будет добавлен к другому узлу.

Если deep установлен как false, дочерние узлы не клонируются. Любой текст, который содержит узел также не клонируется, как и содержащийся в одном или более дочернем узле Text.

Если deep установлено как true, все поддеревья (включая текст, который может быть потомком узла Text) копируется тоже. Для пустых узлов (т.е <img> и <input> элементов) это не имеет значения установлен ли deep как true или false.

Предупреждение: Внимание: cloneNode() может привести к дублированию идентификаторов элементов в документе.

Если исходный узел имеет идентификатор и клон размещён в том же документе, идентификатор должен быть изменён, для того что бы быть уникальным. Имя атрибута также может нуждаться в изменении, в зависимости от будущего имени дубликата.

Чтобы клонировать узел для добавления к другому документу используйте Document.importNode() вместо этого.

Спецификации

Specification
DOM Standard
# ref-for-dom-node-clonenode①

Совместимость с браузерами

BCD tables only load in the browser