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


相关推荐: 如何制作一个表白网站视频,关于勇敢表白的小标题?  高性价比服务器租赁——企业级配置与24小时运维服务  制作电商网页,电商供应链怎么做?  简单实现Android文件上传  重庆市网站制作公司,重庆招聘网站哪个好?  Python结构化数据采集_字段抽取解析【教程】  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何在景安服务器上快速搭建个人网站?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  node.js报错:Cannot find module 'ejs'的解决办法  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  郑州企业网站制作公司,郑州招聘网站有哪些?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  独立制作一个网站多少钱,建立网站需要花多少钱?  黑客入侵网站服务器的常见手法有哪些?  如何做网站制作流程,*游戏网站怎么搭建?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  LinuxCD持续部署教程_自动发布与回滚机制  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Python高阶函数应用_函数作为参数说明【指导】  如何用景安虚拟主机手机版绑定域名建站?  如何快速登录WAP自助建站平台?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何在阿里云高效完成企业建站全流程?  详解Android图表 MPAndroidChart折线图  深圳网站制作的公司有哪些,dido官方网站?  如何有效防御Web建站篡改攻击?  Java类加载基本过程详细介绍  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  浅谈javascript alert和confirm的美化  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Windows Hello人脸识别突然无法使用  WEB开发之注册页面验证码倒计时代码的实现  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Python文本处理实践_日志清洗解析【指导】  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel如何使用查询构建器?(Query Builder高级用法)  Linux系统运维自动化项目教程_Ansible批量管理实战  nodejs redis 发布订阅机制封装实现方法及实例代码  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑