文章导航

JavaScript cloneNode() 克隆节点

2018-10-29 12:34| 作者: admin| 查看: 2302| 评论: 0|来自: 蚂蚁部落

此方法可以克隆一个节点,根据参数的不同可以进行浅拷贝或者深拷贝。

下面会结合代码实例对此方法的使用进行详细介绍。

语法结构:

[JavaScript] 纯文本查看 复制代码
Node.cloneNode(deep)

参数解析:

(1).Node:将要被克隆的节点。

(2).deep: 可选,布尔值,默认值为false,规定是否进行深度克隆,如果参数为true,那么将克隆Node节点以及它的后代节点,如果参数为false,那么只克隆Node节点本身。

浏览器支持:

(1).IE浏览器支持此方法。

(2).edge浏览器支持此方法。

(3).谷歌浏览器支持此方法。

(4).opera浏览器支持此方法。

(5).火狐浏览器支持此方法。

(6).safria浏览器支持此方法。

代码实例:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
div{
  width:100px;
  height:100px;
  background-color:blue;
  margin:5px;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementsByTagName("div")[0];
  let obt=document.getElementById("bt");
  obt.onclick=function(){
    let cloneNode=odiv.cloneNode();
    document.body.appendChild(cloneNode);
  }
}
</script>
</head>
<body>
<input type="button" id="bt" value="查看演示"/>
<div></div>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/29/123553yconnmm95um5tznn.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

代码分析如下:

(1).点击按钮后,首先会克隆div,cloneNode方法默认参数是false。

(2).然后通过appendChild方法将其追加到body中去。

cloneNode方法默认参数为false,采用浅克隆,也就是只克隆Node节点本身。

代码演示如下:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
div{
  width:100px;
  height:100px;
  line-height:100px;
  text-align:center;
  background-color:blue;
  margin:5px;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementsByTagName("div")[0];
  let obt=document.getElementById("bt");
  obt.onclick=function(){
    let cloneNode=odiv.cloneNode();
    document.body.appendChild(cloneNode);
  }
}
</script>
</head>
<body>
<input type="button" id="bt" value="查看演示"/>
<div>蚂蚁部落</div>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/29/123622seqooqajkmavmkmx.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

由于使用的是浅拷贝,所以只会拷贝div节点本身,它的后代节点并不会被一同拷贝。

对于<img>或者<input>等空元素,无所谓浅拷贝或者深拷贝,它们没有子节点。

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
.ant{
  width:100px;
  height:100px;
  line-height:100px;
  text-align:center;
  background-color:blue;
  color:red;
  margin:5px;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementsByTagName("div")[0];
  let obt=document.getElementById("bt");
  obt.onclick=function(){
    let cloneNode=odiv.cloneNode(true);
    document.body.appendChild(cloneNode);
  }
}
</script>
</head>
<body>
<input type="button" id="bt" value="查看演示"/>
<div class="ant">蚂蚁部落</div>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/29/123647lkg5nrz9qcckmrr1.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

被克隆的元素背景颜色依然是蓝色,字体颜色同样也是红色。

这说明,元素的属性同样会被克隆,但是有例外:

(1).addEventListener注册的事件处理函数不会被克隆。

(2).dom.onclick类似注册的事件处理函数不会被克隆。

(3).<div>蚂蚁部落</div>此种类似方式注册的事件处理函数会被克隆。

还有一点需要注意,避免id属性值重复,如果被克隆元素具有id属性。

那么新克隆的元素要修改一下属性值,以避免出现此情况。

代码实例如下:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
div{
  width:100px;
  height:100px;
  line-height:100px;
  text-align:center;
  background-color:blue;
  margin:5px;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementsByTagName("div")[0];
  let obt=document.getElementById("bt");
  obt.onclick=function(){
    let cloneNode=odiv.cloneNode();
    cloneNode.id="mayi";
    document.body.appendChild(cloneNode);
  }
}
</script>
</head>
<body>
<input type="button" id="bt" value="查看演示"/>
<div id="ant">蚂蚁部落</div>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/29/123712kqvp80n0ee9o3olx.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

动态修改了新元素的id属性值。

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
div{
  width:200px;
  height:100px;
  text-align:center;
  background-color:blue;
  margin:5px;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementsByTagName("div")[0];
  let obt=document.getElementById("bt");
  obt.onclick=function(){
    let txtNode=odiv.childNodes[0];
    let newTxtNode=txtNode.cloneNode();
    odiv.appendChild(newTxtNode);
  }
}
</script>
</head>
<body>
<input type="button" id="bt" value="查看演示"/>
<div>蚂蚁部落</div>
</body>
</html>

由于对元素节点的操作占绝大多数,所以不要想当然认为此方法是针对元素节点的。

上述代码实现了对文本节点的拷贝操作,非常简单,不多介绍。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部