JavaScript动态操作DOM节点:创建、删除、替换与克隆详解
本文详解JavaScript中动态操作网页元素的四种核心方法。通过createTextNode和createElement实现文本与标签节点的创建,解析innerHTML直接修改HTML字符串的机制。同时介绍使用removeChild删除节点、replaceChild替换节点以及cloneNode克隆节点的完整代码示例,涵盖常见DOM增删改查场景。
JavaScript动态创建节点的三种方式
在JavaScript中,动态生成网页元素主要涉及以下几种创建方式:
- 首先,可以使用createTextNode()方法来构建一个纯文本节点对象。
- 其次,利用createElement()方法可以创建一个指定的HTML标签元素对象。
- 最后,可以直接操作容器元素的innerHTML属性。这种方法本质上是修改容器内的HTML字符串代码,而非直接操作DOM对象树,因此性能与对象树操作有所不同。
以下是具体的代码实现详解:
HTML页面结构与交互按钮
<body>
<input type="button" value="创建并添加节点1" onclick="addNode1()"/>
<input type="button" value="创建并添加节点2" onclick="addNode2()"/>
<input type="button" value="创建并添加节点3" onclick="addNode3()"/>
<input type="button" value="remove节点1 " onclick='removenode()'/>
<input type="button" value="replaceNode节点2替换 " onclick='remove2()'/><!--1替换2,并且1没有保留-->
<input type="button" value="clone替换 " onclick='clone()'/>
<div id="div_id1">这是div模块--</div>
<div id="div_id2">必须好好地学习,这样才能让自己有很好的回报</div>
<div id="div_id3">好好干,加油↖(^ω^)↗</div>
<div id="div_id4">你懂得区域,实验区域</div>
</body>
方式一:创建文本文档节点
第一种方式是通过创建文本文档节点来实现。
<span style="font-size:18px;">function addNode1(){
//1利用createTextNode()创建一个文本对象
var text=document.createTextNode("这是修改的,创建的文档");
//2获取div对象
var node1=document.getElementById("div_id1");
//添加成div对象的孩子
node1.appendChild(text);}</span><span style="font-size:24px;">
</span>
方式二:创建标签对象
第二种方式是利用createElement()方法显式创建一个标签对象。
function addNode2(){
//1,利用createElement()创建一个标签对象
var nn=document.createElement("input");
nn.type="button"
nn.value="创建的按钮";
nn.target="_blank";
//2,获得div对象
var node2=document.getElementById("div_id2");
//添加成div对象的孩子
node2.appendChild(nn);
}
方式三:利用innerHTML属性
第三种方式则是直接利用容器标签的innerHTML属性,这本质上是修改该标签容器中的HTML代码,而非对DOM对象树进行直接操作。
function addNode3(){
var mm=document.getElementById("div_id3");
mm.innerHTML="<a href='http://www.baidu.com'><input type='button' value='新建的按钮'></a>";
}
- 除了创建,还需要掌握节点的删除操作。
节点的删除、替换与克隆操作
从元素上移除子节点主要有removeNode和removeChild两种方法。其中,removeNode是IE浏览器特有的自杀式删除,兼容性差;通常推荐使用通过父节点调用removeChild()方法来删除子节点,这是通用且标准的做法。
function removenode(){
var node =document.getElementById("div_id4");
// alert(node.nodeName);//DIV
// 自杀式 node.removeNode(true); //removeNode 从文档层次中删除对象。ie可以出现现象,一般不采用自杀式
node.parentNode.removeChild(node);////通过父节点去删除它的孩子,一般常用
alert("aa");
}
- 节点替换操作中,如果使用replaceNode(自杀式),被替换的节点将不再保留;而使用标准的replaceChild方法,可以通过父节点将旧节点替换为新节点。
function remove2(){
var node1 =document.getElementById("div_id1");
var node2 =document.getElementById("div_id2");
// node1.replaceNode(node2);//自杀式不通用
////通过父节点去替换它的孩子:用node1去替换node2
node1.parentNode.replaceChild(node1,node2);//object.replaceChild(oNewNode, oChildNode)
}
- 节点克隆可以通过cloneNode()方法实现,该方法接收一个布尔参数。若参数为false,仅克隆节点本身;若为true,则连同其所有子节点一起克隆。
function clone(){
var node1 =document.getElementById("div_id1");
var node2 =document.getElementById("div_id2");
var node1_2=node1.cloneNode(true);//false只能clone基本的,不会clone下面的其他子节点
//克隆一个对象,默认参数为false。参数为true时,连子节点一起克隆
node1.parentNode.replaceChild(node1_2,node2);
}
操作效果展示
上述操作的运行效果如下图所示:

完整源代码示例
以下是完整的源代码示例:
<!DOCTYPE html>
<html>
<head>
<title>DOM_operation.html</title>
<style type="text/css">
div{
border:#00f solid 1px;
width:200px;
height:100px;
}
</style>
<script type="text/javascript">
//AAAA 增
//方式一 创建文本文档
function addNode1(){
//1利用createTextNode()创建一个文本对象
var text=document.createTextNode("这是修改的,创建的文档");
//2获取div对象
var node1=document.getElementById("div_id1");
//添加成div对象的孩子
node1.appendChild(text);
}
function addNode2(){
//1,利用createElement()创建一个标签对象
var nn=document.createElement("input");
nn.type="button"
nn.value="创建的按钮";
nn.target="_blank";
//2,获得div对象
var node2=document.getElementById("div_id2");
//添加成div对象的孩子
node2.appendChild(nn);
}
//直接利用容器标签中的一个属性:innerHTML-----本质上改该标签容器中的“html代码”,不是我们认为的对象树的操作
function addNode3(){
var mm=document.getElementById("div_id3");
mm.innerHTML="<a href='http://www.baidu.com'><input type='button' value='新建的按钮'></a>";
}
//BBBBBB-------删
//删除节点 使用 removeNode 和 removeChild 从元素上删除子结点两种方法,通常采用第二种方法
function removenode(){
var node =document.getElementById("div_id4");
// alert(node.nodeName);//DIV
// 自杀式 node.removeNode(true); //removeNode 从文档层次中删除对象。ie可以出现现象,一般不采用自杀式
node.parentNode.removeChild(node);////通过父节点去删除它的孩子,一般常用
alert("aa");
}
//替换 没有保留替换的那个
function remove2(){
var node1 =document.getElementById("div_id1");
var node2 =document.getElementById("div_id2");
// node1.replaceNode(node2);//自杀式不通用
////通过父节点去替换它的孩子:用node1去替换node2
node1.parentNode.replaceChild(node1,node2);//object.replaceChild(oNewNode, oChildNode)
}
function clone(){
var node1 =document.getElementById("div_id1");
var node2 =document.getElementById("div_id2");
var node1_2=node1.cloneNode(true);//false只能clone基本的,不会clone下面的其他子节点
//克隆一个对象,默认参数为false。参数为true时,连子节点一起克隆
node1.parentNode.replaceChild(node1_2,node2);
}
</script>
</head>
<body>
<input type="button" value="创建并添加节点1" onclick="addNode1()"/>
<input type="button" value="创建并添加节点2" onclick="addNode2()"/>
<input type="button" value="创建并添加节点3" onclick="addNode3()"/>
<input type="button" value="remove节点1 " onclick='removenode()'/>
<input type="button" value="replaceNode节点2替换 " onclick='remove2()'/><!--1替换2,并且1没有保留-->
<input type="button" value="clone替换 " onclick='clone()'/>
<div id="div_id1">这是div模块--</div>
<div id="div_id2">必须好好地学习,这样才能让自己有很好的回报</div>
<div id="div_id3">好好干,加油↖(^ω^)↗</div>
<div id="div_id4">你懂得区域,实验区域</div>
</body>
</html>
以上分享了通过JavaScript实现自动生成网页元素及节点操作的方法,希望能为相关学习提供实际帮助。
网页开发三者分工:HTML结构、CSS样式与JavaScript交互怎么协作
2026-11-05 12:51:22
JS解析URL参数时怎么处理中文乱码和特殊字符
2026-11-05 12:47:23
js-cookie 存储 JSON 对象:自动序列化与反序列化技巧
2026-11-05 12:36:26
marked.js 快速上手:安装与基础 Markdown 转 HTML 示例
2026-11-05 09:32:53
Phaser.js 与 PixiJS、Cocos Creator 的技术选型对比
2026-11-05 08:36:30
