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), поверхностный клон, по умолчанию, вместо глубокого клона.
Пример
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()
вместо этого.
Совместимость с браузерами
BCD tables only load in the browser
Спецификации
- DOM Level 2 Core: cloneNodeREC
- DOM Level 3 Core: cloneNodeREC
- DOM4: cloneNode (черновик)