cloneNode(true) 可深克隆节点及其所有子元素和文本内容,但不复制事件监听器、dataset、表单值及动态属性;推荐用<template>克隆避免副作用,jQuery中对应方法为.clone(true)。

用 cloneNode(true) 就能克隆带全部子元素的节点。
深克隆:用 true 参数复制整个结构
DOM 节点的 cloneNode() 方法默认只克隆自身(浅克隆),要包含所有后代元素,必须显式传入 true:
-
node.cloneNode(true)→ 克隆节点 + 所有子元素 + 所有文本内容 -
node.cloneNode(false)→ 只克隆当前节点,不带任何子节点(包括文本) - 省略参数等同于
false,即默认是浅克隆
克隆后需要手动处理的内容
深克隆虽复制了 HTML 结构和文本,但以下内容不会自动继承:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 绑定的事件监听器(如
addEventListener) - 通过
dataset或.data-设置的自定义数据(需重新赋值) - 表单控件的当前值(
<input>的value、<select>的选中状态等) - 通过 JavaScript 动态添加的属性或引用(如
node.myCustomProp = 'xxx')
配合 使用更安全高效
若频繁复用结构,推荐用 <template> 标签定义模板,再克隆其 content:
立即学习“Java免费学习笔记(深入)”;
<template id="item"><div><p>内容</p></div></template>const frag = document.getElementById('item').content.cloneNode(true);- 这样避免从真实 DOM 中克隆,不会意外触发副作用或影响原结构
jQuery 中的对应写法
如果项目使用 jQuery,.clone(true) 同样支持深克隆,并可选择是否复制事件与数据:
-
$('div').clone()→ 只克隆结构 -
$('div').clone(true)→ 克隆结构 + 绑定事件 + jQuery 数据缓存

















