在使用appendChild()方法中遇到了一个问题:

下面的代码可以正常插入多个新元素

  1.   
      <input type="button" value="在后面插入新元素" id="btn6">
      <div id="dv7">
  2. <p>a</p>
  3. <span>b</span>
  4. <h3>c</h3>
  5. </div>
  6. <script>
  7. var dv7 = document.getElementById("dv7");
  8. document.getElementById("btn6").onclick = function(){
  9. var newElement = document.createElement("input"); //创造一个新元素
  10. newElement.type = "button";
  11. newElement.value = "新元素";
  12.  
  13. dv7.appendChild(newElement); //在dv7的内部的最后插入新元素
  14. };
  15. </script>

下面的代码则无法实现

  1. <input type="button" value="在后面插入新元素" id="btn6">
      <div id="dv7">
  2. <p>a</p>
  3. <span>b</span>
  4. <h3>c</h3>
  5. </div>
  6. <script>
  7. var dv7 = document.getElementById("dv7");
  8. var newElement = document.createElement("input"); //创造一个新元素
  9. newElement.type = "button";
  10. newElement.value = "新元素";
  11. document.getElementById("btn6").onclick = function(){
  12. dv7.appendChild(newElement); //在dv7的内部的最后插入新元素
  13. };
  14. </script>

查找资料发现一段话:如果文档树中已经存在了 newchild,它将从文档树中删除,然后重新插入它的新位置。

第一种方法中,每一次点击事件都会创造一个新元素,虽然名字相同但已经不是那一个元素了(点击事件结束newElement被释放),所以appendChild操作的新元素没有在DOM树中存在,可一多次插入新元素。

第二种方法中,创建newElement在点击事件之外,属于DOM树中的这个确定的新元素,多次触发点击事件,不能实现多次插入。

你可以使用 appendChild() 方法将一个元素移动到另外一个地方

例:下面的代码点击两个按钮,新元素位置会变化

  1. <input type="button" value="在后面插入新元素" id="btn6">
  2. <input type="button" value="改变新元素的位置" id="btn7">
  3. <div id="dv7">
  4. <p id="new">a</p>
  5. <span>b</span>
  6. <h3>c</h3>
  7. </div>
  8. <script>
  9. var dv7 = document.getElementById("dv7");
  10. var newElement = document.createElement("input"); //创造一个新元素
  11. newElement.type = "button";
  12. newElement.value = "新元素";
  13. document.getElementById("btn6").onclick = function(){
  14. dv7.appendChild(newElement); //在dv7的内部的最后插入新元素
  15. };
  16. document.getElementById("btn7").onclick = function(){
  17. document.getElementById("new").appendChild(newElement); //在p标签内部的后面插入这个新元素
  18. };
  19. </script>

不仅对创建的新元素,DOM中原来存在的元素也可以用这种方法改变位置

appendChild()方法遇到的问题的更多相关文章

  1. 踩坑所引发出的appendChild方法的介绍

    问题描述 最近在做项目时,遇到一个问题,当js生成一个组件后,会注入到页面的某个节点里显示.在组件内部进行了一次注入操作,在调用组件的外部js文件中也进行了一次注入操作,结果发现页面里只生成了一份组件 ...

  2. appendChild方法详解

    方法:target.appendChild(ele); 执行该方法时,会发生两部操作: 1.将元素ele从原来的父元素中移除掉 2.将元素追加至新的目标元素中,并且保留元素的所有样式信息和事件... ...

  3. HTML DOM appendChild() 方法

    <!DOCTYPE html> <html> <body> <ul id="myList"> <li>Coffee< ...

  4. PHP对XML添加节点之appendChild()方法讲解

    问题如下:<b > <c>test</c> </b>我要在b节点里面添加一个子节点比如说加一个d节点,要实现成<b > <c>t ...

  5. C# 通过ImportNode AppendChild方法合并XmlDocument,XML转为DataTable

    var doc1 = new XmlDocument(); var doc2 = new XmlDocument(); XmlNode root1 = doc1.DocumentElement; do ...

  6. js:插入节点appendChild insertBefore使用方法

    首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在 ...

  7. JS中插入节点的方法appendChild和insertBefore的应用

    1.appendChild() 方法:可以向节点的子节点列表的末尾添加新的子节点.比如:appendChild(newchild)括号里可以是创建的标签var newchild = document. ...

  8. JavaScript--元素对象方法setAttribute() 和appendChild()

    appendChild() 方法可向节点的子节点列表的末尾添加新的子节点 setAttribute() 方法创建或改变某个新属性.如果指定属性已经存在,则只设置该值 <!DOCTYPE html ...

  9. JS(JavaScript)插入节点的方法appendChild与insertBefore

    首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在 ...

随机推荐

  1. js数组条件筛选——map()

    在对象数组中检索属性为指定值得某个对象使用map()就非常方便. 对象数组 var studentArray = [ {"name":"小明","ge ...

  2. 彻底征服 Spring AOP 之 实战篇

      Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个 ...

  3. python大法好——继承、多态

    1.继承 类的继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制. 通过继承创建的新类称为子类或派生类,被继承的类称为基类.父类或超类. 继承语法 class 派 ...

  4. python abc模块

    面向对象的设计中,抽象类,接口这些必不可少的东西,在python中是如何提现的呢? python作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现,在执行的时候python不严格要求你必须是 ...

  5. 基于maven javaweb编程缺少java源文件

    前提:基于maven的javaweb的开发环境,可参考 link 一. https://blog.csdn.net/ldlly0505/article/details/79674826 1.在sour ...

  6. 简单的TSQL基础编程格式,存储过程,视图

    这里简单整理一下数据库简单的编程,变量定义,赋值,分支语句和循环(这里以Sqlserver),以及存储过程格式 首先是变量定义,赋值,分支语句 --======TSQL数据库基础编程,定义变量,赋值, ...

  7. OpenStack 安装:nova服务

    上一篇介绍了glance,并且成功创建了一个镜像,这一篇介绍Nova. 首先创建Nova用户,需要记得先source环境变量,然后创建Nova用户,并设置密码为nova [root@linux-nod ...

  8. HTML 元素大小

    1.元素的偏移量 元素的可见大小是由其高度.宽度决定,包括所有的内边距.滚动条和边框大小(不包括外边距). offsetHeight :元素在垂直方向上占用的空间大小,以像素计算.包括元素的高度,水平 ...

  9. 使用es6的then()方法封装jquery的ajax请求

    使用场景: jsp页面中使用jquery的ajax请求比较频繁,以前vue框架的项目用过axios,所以就想着用then()封装一个公共请求的方法,这样每次请求就不用那么麻烦的写一大堆请求参数了. 示 ...

  10. c#: WebBrowser控制台输出

    还是处理视频下载所相关的问题. 有些网站,它的页面代码是由页面加载后js动态生成,那么其原始的html便不能用.页面渲染后的代码,是我们需要的 c#中,我用WebBrowser这个控件处理.设置项目类 ...