Java DOM如何复制和移动节点

发布时间 - 2026-02-01 00:00:00    点击率:
Java DOM中复制节点用cloneNode(boolean)创建新节点,深复制含子节点,浅复制仅当前节点;移动节点本质是先removeChild再appendChild,同一节点不能同时存在于两处。

Java DOM 中复制和移动节点主要通过 Node 接口的 cloneNode(boolean)appendChild()insertBefore()replaceChild()removeChild() 等方法实现。关键区别在于:复制是创建新节点,移动是改变已有节点在树中的位置。

DOM 节点复制:用 cloneNode() 深浅拷贝

cloneNode(boolean deep) 是唯一标准的复制方法。参数为 true 时执行深复制(包含所有子节点和属性),为 false 时只复制当前节点(浅复制,无子节点)。

  • 克隆后的节点是“孤儿”,不自动挂载到文档中,需手动调用 appendChild()insertBefore() 添加
  • 克隆节点的 parentNodenull,且与原节点无引用关系,修改互不影响
  • 示例:复制一个

    Hello

    并追加到 body:
    Element div = (Element) doc.getElementById

    ("box");
    Node clone = div.cloneNode(true);
    doc.getDocumentElement().appendChild(clone);

DOM 节点移动:本质是“先移除再插入”

DOM 中没有直接的 “move” 方法。移动节点实际是将其从原父节点中移除,再添加到新父节点下——这一步自动完成,无需克隆。

立即学习“Java免费学习笔记(深入)”;

  • 调用 parentNode.removeChild(node) 后,该节点仍有效,可被重复添加(只要没被垃圾回收)
  • 同一节点不能同时存在于两个位置;若已存在目标父节点中,再次 appendChild() 会先隐式移除原位置,再插入新位置
  • 常用组合:
    oldParent.removeChild(node);
    newParent.appendChild(node);

    等价于更简洁的:
    newParent.appendChild(node); // 若 node 原属 oldParent,会自动脱离

安全移动节点:避免空指针与非法操作

移动前建议检查节点状态,防止运行时异常。

  • 确认节点非 null,且有有效父节点(node.getParentNode() != null)再调用 removeChild()
  • 确保目标父节点不为 null,且类型支持添加该节点(例如不能把 Document 直接 append 到 Element
  • 若需将节点从 A 移到 B 的指定位置(如插到第 2 个子节点前),用:
    newParent.insertBefore(node, newParent.getChildNodes().item(1));

复制并移动的常见组合用法

有时需要“复制一份放到别处”,或“移动后保留原位副本”,这时要明确区分 clone + append 和 remove + append。

  • 复制并追加(原节点不动):parent.appendChild(node.cloneNode(true));
  • 移动并替换(原位置被新内容替代):parent.replaceChild(newNode, oldNode);
  • 移动到兄弟节点之后:parent.insertBefore(node, nextSibling);(注意 nextSibling 可为 null,此时等效于 appendChild


# java  # node  # app  # 区别  # Boolean  # NULL  # xml  # 指针  # 接口  # 空指针  # append  # dom  # 移除  # 已有  # 将其  # 不动  # 不为  # 能把  # 可为  # 移到  # 到第  # 两处 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel怎么在Blade中安全地输出原始HTML内容  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Linux系统运维自动化项目教程_Ansible批量管理实战  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  如何在云主机上快速搭建多站点网站?  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何在Ubuntu系统下快速搭建WordPress个人网站?  JavaScript Ajax实现异步通信  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何在阿里云服务器自主搭建网站?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel Fortify是什么,和Jetstream有什么关系  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何在企业微信快速生成手机电脑官网?  如何获取免费开源的自助建站系统源码?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  如何快速搭建FTP站点实现文件共享?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel如何使用模型观察者?(Observer代码示例)  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  详解Oracle修改字段类型方法总结  开心动漫网站制作软件下载,十分开心动画为何停播?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  网站制作报价单模板图片,小松挖机官方网站报价?  bootstrap日历插件datetimepicker使用方法  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel怎么清理缓存_Laravel optimize clear命令详解  长沙做网站要多少钱,长沙国安网络怎么样?  高防服务器租用如何选择配置与防御等级?  如何快速搭建高效简练网站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  常州企业网站制作公司,全国继续教育网怎么登录?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何快速生成高效建站系统源代码?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  jQuery validate插件功能与用法详解  如何在IIS服务器上快速部署高效网站?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  javascript读取文本节点方法小结