Метод 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 (По умолчанию |
13.0 (13.0) | (Да) | ? |
Yes (По умолчанию |
Свойство | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |
deep как необязательный параметр |
? | ? | 13.0 (13.0) | ? | ? | ? |
Спецификации
- DOM Level 2 Core: cloneNodeREC
- DOM Level 3 Core: cloneNodeREC
- DOM4: cloneNode (черновик)