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

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

  
  <input type="button" value="在后面插入新元素" id="btn6">
  <div id="dv7">
<p>a</p>
<span>b</span>
<h3>c</h3>
</div>
<script>
var dv7 = document.getElementById("dv7");
document.getElementById("btn6").onclick = function(){
var newElement = document.createElement("input"); //创造一个新元素
newElement.type = "button";
newElement.value = "新元素"; dv7.appendChild(newElement); //在dv7的内部的最后插入新元素
};
</script>

下面的代码则无法实现

   <input type="button" value="在后面插入新元素" id="btn6"> 
  <div id="dv7">
<p>a</p>
<span>b</span>
<h3>c</h3>
</div>
<script>
var dv7 = document.getElementById("dv7");
var newElement = document.createElement("input"); //创造一个新元素
newElement.type = "button";
newElement.value = "新元素";
document.getElementById("btn6").onclick = function(){
dv7.appendChild(newElement); //在dv7的内部的最后插入新元素
};
</script>

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

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

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

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

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

        <input type="button" value="在后面插入新元素" id="btn6">
<input type="button" value="改变新元素的位置" id="btn7">
<div id="dv7">
<p id="new">a</p>
<span>b</span>
<h3>c</h3>
</div>
<script>
var dv7 = document.getElementById("dv7");
var newElement = document.createElement("input"); //创造一个新元素
newElement.type = "button";
newElement.value = "新元素";
document.getElementById("btn6").onclick = function(){
dv7.appendChild(newElement); //在dv7的内部的最后插入新元素
};
document.getElementById("btn7").onclick = function(){
document.getElementById("new").appendChild(newElement); //在p标签内部的后面插入这个新元素
};
</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. Oracle SQL 优化规则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  2. json字符串装List<Object>

    List<SearchParam> ts = (List<SearchParam>) JSONArray.parseArray(jsonStr, SearchParam.cla ...

  3. autolayout后获取frame

    autolayout设置完layout立即用frame拿对应的值可能拿不准,因为autolayout设置完布局后布局引擎并不会马上去更改布局,而是将布局标记为待更新,此时可以用的方法有两种,一是延时0 ...

  4. (转)VS2010反编译dll之后存在的resource修改为resx

    https://www.cnblogs.com/tangbaono1/p/6897183.html 1.找到安装VS的时候,存在的ResGen.exe,我的电脑是win7的,路径是在C:\Progra ...

  5. C#//字节数组转16进制字符串

    //字节数组转16进制字符串 private static string byteToHexStr(byte[] bytes,int length) { string returnStr = &quo ...

  6. Deploy, Issue and Transfer Tokens

    [Deploy, Issue and Transfer Tokens] 本例使用 eosio.token 合约来尝试发行Token. 1.签出 eosio.contracts. git clone h ...

  7. SpringBoot的spring-boot-starter有哪些(官方)

    看完这些,你就知道每个spring-boot-starter依赖些什么东西了. 地址:https://github.com/spring-projects/spring-boot/tree/v2.1. ...

  8. Sentinel统计线程,QPS,RT的方式

    一.Sentinel是阿里开源产品,用于流量监控和管理. 二.对于流量控制,可以通过限制线程数和QPS实现限流 1. 资源进入Sentinel的方式 Entry entry = null; try { ...

  9. day37 异步回调和协程

    异步回调 """ 异步任务使用场景 爬虫 1.从目标站点下载网页数据 本质就是HTML格式字符串 2.用re从字符串中提取出你需要的数据 ""&quo ...

  10. Python+Selenium学习--自动化测试模型

    前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...