JS对文档进行操作
对文档进行操作
对DOM的修改是,构建动态网页的关键。使用下面列举的方法,我们可以创建新的网页并且动态进行更改。
更多的DOM操作方法请查 DOM1
创建节点
使用以下方法在DOM中创建元素。
- document.createElement(tag):创建元素节点
var div = document.createElement('div') - document.createTextNode(text): 创建文本节点
var textElem = document.createTextNode('Robin was here')
createElement 方法是使用最广泛的, 但 createTextNode 方法也比较常用。它会创建文本节点并可以被追加到其他的元素里。
对于一个空元素,创建一个文本节点并且把它追加到别的元素是比 innerHTML 效率高很多。
但是innerHTML 比较简洁,并且支持标签的嵌套,因此他们俩都被广泛的使用。
一个元素是可以被克隆的:
- elem.cloneNode(true):深度拷贝(包含子节点)
- elem.cloneNode(false):浅拷贝
追加节点
parentElem.appendChild(elem):添加elem子节点到parentElem节点。
下面的代码将会演示如何创建元素并追加到 BODY 中的:

<div>
...
</div>
<script>
var div = document.body.children[0] var span = document.createElement('span')
span.innerHTML = 'A new span!'
div.appendChild(span)
</script>

新的元素会成为最后一个子节点。
有一个空内容的元素节点 elem,下面两种操作方式有什么不同, text内容为 "<b>tag</b>"
- elem.appendChild(document.createTextNode(text))
- elem.innerHTML = text
parentElem.insertBefore(elem, nextSibling):插入elem到parentElem的子节点nextSibling之前。
演示:

<div>
...
</div>
<script>
var div = document.body.children[0] var span = document.createElement('span')
span.innerHTML = 'A new span!'
div.insertBefore(span, div.firstChild)
</script>

注意当 insertBefore的第二个参数为null时,功能会跟appendChild一样。
elem.insertBefore(newElem, null) // same as
elem.appendChild(newElem)
所有插入方法都会返回被添加的节点。
删除节点
从DOM中删除节点,主要有两个方法:
- parentElem.removeChild(elem):从parentElem子节点中删除elem元素
- parentElem.replaceChild(elem, currentElem):从parentElem替换elem元素为currentElem
两个方法都会返回被删除的节点,但是它可以再次插入到DOM里。
如果你想移动某个元素,你没必要先删除它。
elem.appendChild/insertBefore 会自动的从前一个位置删除elem。下例将会演示,移动最后一个元素到子节点的第一个位置。
<div>First div</div>
<div>Last div</div>
<script>
var first = document.body.children[0]
var last = document.body.children[1] document.body.insertBefore(last, first)
</script>
任务及例子
编写 insertAfter(elem, refElem)方法,插入 elem 节点到 refElem节点后。
<div>Very</div>
<div>Secret</div> <script>
var elem = document.createElement('div');
elem.innerHTML = 'Child'; function insertAfter(elem, refElem) {
}
insertAfter(elem, document.body.firstChild)
insertAfter(elem, document.body.lastChild) </script>
编写一个方法 removeChildren 移除该元素所有子节点。
<div>Very</div>
<div>Secret</div>
<div>Children</div> <script>
function removeChildren(elem) {
} removeChildren(document.body) // 执行后BODY标签变空
</script>
创建一个程序,它又以下功能。
- 通过对话框提示,用户输入内容。(prompt方法弹出对话框)
- 根据内容创建 LI 节点并添加到 UL 中
- 当ESC按下时,停止程序,否则一直运行。
总结
创建节点:
- document.createElement(tag) 创建新的标签
- document.createTextNode(value) 创建指定内容的文本节点(注意创建文本内容时与innerHTML的区别)
- elem.cloneNode(deep) 克隆元素节点
- deep: true 深拷贝
- deep: false 浅拷贝
插入和删除节点:父节点调用方法,都返回elem。
parent.appendChild(elem)parent.insertBefore(elem, nextSibling)parent.removeChild(elem)parent.replaceChild(elem, currentElem)
JS对文档进行操作的更多相关文章
- jQuery-对标签元素 文本操作-属性操作-文档的操作
一.对标签元素文本操作 1.1 对标签中内容的操作 // js var div1 = document.getElementById("div1"); div1.innerText ...
- 使用jsdoc-toolkit实现JS API文档自动化
在前面的博文中探讨自动化工程问题时,写过基于NodeJS的,使用gulp.grunt的jsdoc插件实现文档自动化.本文探讨基于java环境的自动化实现. 一.Java安装与环境配置 关于Java的安 ...
- 使用jsdoc-toolkit来自动生成js api文档
近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一. ...
- dot.js教程文档api
dot.js是一个短小精悍的js模板引擎,压缩版仅有4K大小,最近使用dot的时候整理出这个dot.js教程文档,其实称不上什么教程,只是对dot.js的介绍和实例,希望能帮助到一部分需要的人. 使用 ...
- C# 使用XmlDocument类对XML文档进行操作
原创地址:http://www.cnblogs.com/jfzhu/archive/2012/11/19/2778098.html 转载请注明出处 W3C制定了XML DOM标准.很多编程语言中多提供 ...
- MongoDB模拟多文档事务操作
Mongodb不支持多文档原子性操作,因此依据两阶段提交协议(Two Phase Commits protocol)来模拟事务. 以两个银行账户之间的转账行为为例,来说明如何实现多文档间的事务操作. ...
- c# word文档的操作
参考https://blog.csdn.net/ruby97/article/details/7406806 Word对象模型 (.Net Perspective) 本文主要针对在Visual St ...
- Grunt-jsdoc生成JS API文档
Grunt-jsdoc生成JS API文档 具体的请看官网 https://github.com/krampstudio/grunt-jsdoc 一:首先确保本机电脑上是否已经安装了nodejs和np ...
- MongoDB .Net Driver(C#驱动) - 内嵌数组/嵌入文档的操作(增加、删除、修改、查询(Linq 分页))
目录 一.前言 1. 运行环境 二.前期准备工作 1. 创建 MongoDBContext MongoDb操作上下文类 2.创建测试类 3.创建测试代码 三.内嵌数组增加元素操作 1.Update.S ...
随机推荐
- Linux lspci查看硬件设备
Linux 主机的硬件配备 lspci 找到的是眼下主机上面的硬件配备 [root@www ~]# lspci [-vvn] 选项与參数: -v :显示很多其它的 PCI 接口装置的具体信息 ...
- Objective-C辛格尔顿
单例类是一种特殊的类.在一个进程种仅仅会存在一个该类的对象,在iOS应用中仅仅会出现一个对象.这样的设计模式在系统框架中很多地方都使用了.如NSFileManager.UIApplication等. ...
- css两种动态显示星星等级的比较(一星、两星、三星、四星、五星)
原文:css两种动态显示星星等级的比较(一星.两星.三星.四星.五星) 以下是显示后的图片,相信在很多网站上都能看到这种效果,目前我知道两种实现方式 1.background-position加上一张 ...
- SVM算法实现(一)
关键字(keywords):SVM 支持向量机 SMO算法 实现 机器学习 假设对SVM原理不是非常懂的,能够先看一下入门的视频,对帮助理解非常实用的,然后再深入一点能够看看这几篇入门文章,作者写得挺 ...
- 《Lua游戏开发实践指南》读后感
书籍地址:http://book.douban.com/subject/20392269/ 一句话点评该书:想用Lua作游戏脚本开发的同学值得一读! (一)本书特点 市面专门讲Lua的中文书籍非常少, ...
- poj 1664 把平果
这个问题可分为两个子问题:什么时候m<n时刻,例如3苹果放在4阿菜,和3苹果放3一样的. 所以m<n时,f[m][n]=f[m][m]; 当m>=n时.可分为两种放法,一种为至少有一 ...
- LAN远程重启server安全方法
原创文章.转载请注明出处.(百度经验:http://jingyan.baidu.com/article/454316abaadc41f7a7c03a13.html) 在局域网中,管理和操作server ...
- jquery animate的递归调用
去年面试过一家做网站的 公司,看了一下他们的案例,看懂一个蛮有意思的 ,一个房地产的官网,是用flash做的.感觉不错. 于是,闲暇之际,简单的jquery 模仿做了一下.下面是我的效果图.脚本也没啥 ...
- Windows下Jekyll安装
一直用Mac,换了新公司使用的电脑是windows,网上粗略的看了一下Jekyll的安装.简略的实现了一遍 首先安装Ruby Ruby安装文件下载地址 下载对应版本,我的电脑是64位的下载64位的版本 ...
- spring mvc 控制器方法传递一些经验对象的数组
由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstru ...