DOM节点的复制添加

需求:获取原DOM列表中的某个节点复制重新添加进该列表

问题

如果直接添加,只会对获取的节点进行移动,而不是添加

  • 利用appendChild()
    1,2,3,4 ===> 获取2节点再添加就成了 1,3,4,2;
    而不是想要的1,2,3,4,5,2;
解决方法
  1. createElement()重新创建一个新的节点,并进行设置;
  2. cloneNode(boolean) 实现节点复制后添加
    createElement的话就没有cloneNode一样那么直接去复制,而是一步一步的创造,所以主要讲的是cloneNode方法。
  • cloneNode方法
    有一个参数(布尔值)
    当false时 会复制节点以及其后代节点
    为true时 连节点的属性也会一起复制
// html 
<div class="parsent">
    <a href="" class="child">1</a>
    <a href="" class="child">2</a>
    <a href="" class="child">3</a>
</div>
// js
var parsent = document.getElementsByClassName('parsent')[0]
var secondChild = parsent.querySelectorAll('a')[1]
var copyChild = secondChild.childNode(true)
parsent.appendChild(copyChild)

添加后的html

<div class="parsent">
    <a href="" class="child">1</a>
    <a href="" class="child">2</a>
    <a href="" class="child">3</a>
    <a href="" class="child">2</a>
</div>

如果直接用一个新变量来储存抽离出来的DOM节点,这样做是没用的,结果会是如下

// js
var parsent = document.getElementsByClassName('parsent')[0]
var secondChild = parsent.querySelectorAll('a')[1]
var copyChild = secondChild
parsent.appendChild(copyChild)
// html
<div class="parsent">
    <a href="" class="child">1</a>
    <a href="" class="child">3</a>
    <a href="" class="child">2</a>  <!--只进行了移动-->
</div>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇是基于《JavaScript高级程序设计(第3版)》DOM相关章节做的整理与归纳,概述了DOM的常见节点类型及...
    查查查查查查克阅读 2,555评论 2 7
  • 本章内容 理解包含不同层次节点的 DOM 使用不同的节点类型 克服浏览器兼容性问题及各种陷阱 DOM 是针对 HT...
    闷油瓶小张阅读 658评论 0 1
  • 虽然现在有着很多优秀的框架,但归根结底我们依然得掌握好DOM知识来针对项目某些情况来使用原生操作,从而达到降低代码...
    俗三疯阅读 802评论 0 2
  • 原文 链接 关注公众号获取更多资讯 一、基本类型介绍 1.1 Node类型 DOM1级定义了一个Node接口,该接...
    前端进阶之旅阅读 3,949评论 7 34
  • 什么是历史? 历史,是被人类记录下来并且做出相应解读的发生在过去的事情。过去发生了很多事情,可是是否构成历史,就要...
    WindyLiu阅读 1,445评论 23 34