appendChild()方法遇到的问题
在使用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()方法遇到的问题的更多相关文章
- 踩坑所引发出的appendChild方法的介绍
问题描述 最近在做项目时,遇到一个问题,当js生成一个组件后,会注入到页面的某个节点里显示.在组件内部进行了一次注入操作,在调用组件的外部js文件中也进行了一次注入操作,结果发现页面里只生成了一份组件 ...
- appendChild方法详解
方法:target.appendChild(ele); 执行该方法时,会发生两部操作: 1.将元素ele从原来的父元素中移除掉 2.将元素追加至新的目标元素中,并且保留元素的所有样式信息和事件... ...
- HTML DOM appendChild() 方法
<!DOCTYPE html> <html> <body> <ul id="myList"> <li>Coffee< ...
- PHP对XML添加节点之appendChild()方法讲解
问题如下:<b > <c>test</c> </b>我要在b节点里面添加一个子节点比如说加一个d节点,要实现成<b > <c>t ...
- C# 通过ImportNode AppendChild方法合并XmlDocument,XML转为DataTable
var doc1 = new XmlDocument(); var doc2 = new XmlDocument(); XmlNode root1 = doc1.DocumentElement; do ...
- js:插入节点appendChild insertBefore使用方法
首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在 ...
- JS中插入节点的方法appendChild和insertBefore的应用
1.appendChild() 方法:可以向节点的子节点列表的末尾添加新的子节点.比如:appendChild(newchild)括号里可以是创建的标签var newchild = document. ...
- JavaScript--元素对象方法setAttribute() 和appendChild()
appendChild() 方法可向节点的子节点列表的末尾添加新的子节点 setAttribute() 方法创建或改变某个新属性.如果指定属性已经存在,则只设置该值 <!DOCTYPE html ...
- JS(JavaScript)插入节点的方法appendChild与insertBefore
首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在 ...
随机推荐
- uva-10602-贪心
题意:有个编辑器,支持三种操作,摁下一个键盘上的字符,重复最后一个单词,删除最后一个字符.给N个字符串,必须先在编辑器内输入第一个字符, 问,输入完所有字符串最少需要摁下多少次键盘. 最多100个字符 ...
- centos6.5部署redmine3.2
ruby 2.1 + rails 4.2+ mysql 5.6 +centos6.5 + rvm 1.29 1.基本的软件环境 yum -y install libyaml-devel zlib-de ...
- 1. redis安装(windows)
Redis在windows下安装过程 转载自(http://www.cnblogs.com/M-LittleBird/p/5902850.html) 一.下载windows版本的Redis 去官网 ...
- Laravel数据库操作 Eloquent ORM
模型首先在App目录下建立student的文件夹 里面放上 Student.php 且需要继承基类Model //允许批量赋值的字段// protected $fillable = ['name',' ...
- 201772020113李清华《面向对象程序设计(java)》第一周学习总结
201772020113<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com b ...
- javascript中let和var的区别
let是es6中新增命令,也是用来声明变量的,可能很多小伙伴都像我一样,定义变量的时候都会用var而很少用到let,那么,let和var到底有什么区别呢? let和var的区别体现在作用域上.var的 ...
- python入门(八):文件操作
1.数据的保存: 1) 内存:常用的变量都是在内存里面的 缺点:关机或进程死掉数据丢失 解决方法:将数据保存至文件中 2 )文件:文本内容.二进制的文件内容 3 )数据库:保存 2.读文件: 1 ...
- easyui改变tab标题
截图: 代码: //更改tab的标题 var tab = $('#microAppVersionTabs').tabs('getTab',0);// 取得第一个tab $('#microAppVe ...
- 【Nodejs】Nodejsの環境構築
参考URL:http://www.runoob.com/nodejs/nodejs-install-setup.html Windowにインストールする方法を紹介します. ▲ダウンロードURL:htt ...
- 存储过程传入datatable
存储过程传入一般的参数都很简单,今天要说一下存储过程传入datatable 类型 首先要自定义一个 表类型 CREATE TYPE [dbo].[servicedatableType] AS TABL ...