--- title: Node.cloneNode() slug: Web/API/Node/cloneNode translation_of: Web/API/Node/cloneNode ---
Метод Node.cloneNode()
возвращает дубликат узла, из которого этот метод был вызван.
var dupNode = node.cloneNode(deep);
node
true,
если дети узла должны быть клонированы или false
для того, чтобы был клонирован только указанный узел.Примечание: в спецификации DOM4 (как реализовано в Gecko 13.0 {{geckoRelease(13)}}), deep
необязательный аргумент. Если он опущен, метод действует как если бы значение deep
было true
, по умолчанию используется глубокое клонирование. Для создания поверхностного клонирования, deep
должен быть установлен как false
.
Это поведение было изменено в последней спецификации, и если опущено значение, метод будет действовать как если бы deep
было false
. Хотя, это все ещё не обязательно, вы всегда должны обеспечить аргументом deep
, для прямой и обратной совместимости. С Gecko 28.0 {{geckoRelease(28)}}), консоль предупреждает разработчиков не опускать аргумент. Начиная с Gecko 29.0 {{geckoRelease(29)}}), поверхностный клон, по умолчанию, вместо глубокого клона.
var p = document.getElementById("para1"); var p_prime = p.cloneNode(true);
Клонирование узлов копирует все атрибуты и их значения, в том числе собственных (в линию) перехватчиков. Это не копирует перехватчики событий, добавленных используя addEventListener()
или тех что назначены через свойства элемента (т.е node.onclick = fn
).
Дубликат узла, возвращённого cloneNode()
не является частью документа, пока не будет добавлен в другой узел, который является частью документа, используя {{domxref("Node.appendChild()")}} или другой метод. Кроме того, не имеет родителя, пока не будет добавлен к другому узлу.
Если deep
установлен как false
, дочерние узлы не клонируются. Любой текст, который содержит узел также не клонируется, как и содержащийся в одном или более дочернем узле {{domxref("Text")}}.
Если deep
установлено как true
, все поддеревья (включая текст, который может быть потомком узла {{domxref("Text")}}) копируется тоже. Для пустых узлов (т.е {{HTMLElement("img")}} и {{HTMLElement("input")}} элементов) это не имеет значения установлен ли deep
как true
или false
.
cloneNode()
может привести к дублированию идентификаторов элементов в документе.Если исходный узел имеет идентификатор и клон размещён в том же документе, идентификатор должен быть изменён, для того что бы быть уникальным. Имя атрибута также может нуждаться в изменении, в зависимости от будущего имени дубликата.
Чтобы клонировать узел для добавления к другому документу используйте {{domxref("Document.importNode()")}} вместо этого.
{{Compat("api.Node.cloneNode")}}