Node.cloneNode()

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

Синтаксис

var dupNode = node.cloneNode(deep);
node
Узел, который будет клонирован.
dupNode
Новый узел, который будет клоном node
deep Необязательный
true, если дети узла должны быть клонированы или false для того, чтобы был клонирован только указанный узел.

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

Это поведение было изменено в последней спецификации, и если опущено значение, метод будет действовать как если бы deep было false. Хотя, это все еще не обязательно, вы всегда должны обеспечить агрументом deep, для прямой и обратной совместимости. С Gecko 28.0 (Firefox 28 / Thunderbird 28 / SeaMonkey 2.25 / Firefox OS 1.3)), консоль предупреждает разработчиков не опускать аргумент. Начиная с Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26)), поверхностный клон, по умолчанию, вместо глубокого клона.

Пример

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

Примечание

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

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

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

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

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

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

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

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

Свойство Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
deep как необязательный параметр

Yes

(По умолчанию false)

13.0 (13.0) (Да) ?

Yes

(По умолчанию false)

Свойство Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)
deep как необязательный параметр ? ? 13.0 (13.0) ? ? ?

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

Метки документа и участники

 Внесли вклад в эту страницу: IvanRave, AlexAlex
 Обновлялась последний раз: IvanRave,