对文档进行操作

 
  1. 创建节点
  2. 追加节点
  3. 删除节点
  4. 任务及例子
  5. 总结

对DOM的修改是,构建动态网页的关键。使用下面列举的方法,我们可以创建新的网页并且动态进行更改。

更多的DOM操作方法请查 DOM1

创建节点

使用以下方法在DOM中创建元素。

  1. document.createElement(tag):创建元素节点

    var div = document.createElement('div')
  2. 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>"

  1. elem.appendChild(document.createTextNode(text))
  2. 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>

参考答案

创建一个程序,它又以下功能。

  1. 通过对话框提示,用户输入内容。(prompt方法弹出对话框)
  2. 根据内容创建 LI 节点并添加到 UL 中
  3. 当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)
 
分类: JavaScript
标签: DOM

JS对文档进行操作的更多相关文章

  1. jQuery-对标签元素 文本操作-属性操作-文档的操作

    一.对标签元素文本操作 1.1 对标签中内容的操作 // js var div1 = document.getElementById("div1"); div1.innerText ...

  2. 使用jsdoc-toolkit实现JS API文档自动化

    在前面的博文中探讨自动化工程问题时,写过基于NodeJS的,使用gulp.grunt的jsdoc插件实现文档自动化.本文探讨基于java环境的自动化实现. 一.Java安装与环境配置 关于Java的安 ...

  3. 使用jsdoc-toolkit来自动生成js api文档

    近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一.  ...

  4. dot.js教程文档api

    dot.js是一个短小精悍的js模板引擎,压缩版仅有4K大小,最近使用dot的时候整理出这个dot.js教程文档,其实称不上什么教程,只是对dot.js的介绍和实例,希望能帮助到一部分需要的人. 使用 ...

  5. C# 使用XmlDocument类对XML文档进行操作

    原创地址:http://www.cnblogs.com/jfzhu/archive/2012/11/19/2778098.html 转载请注明出处 W3C制定了XML DOM标准.很多编程语言中多提供 ...

  6. MongoDB模拟多文档事务操作

    Mongodb不支持多文档原子性操作,因此依据两阶段提交协议(Two Phase Commits protocol)来模拟事务. 以两个银行账户之间的转账行为为例,来说明如何实现多文档间的事务操作. ...

  7. c# word文档的操作

    参考https://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual St ...

  8. Grunt-jsdoc生成JS API文档

    Grunt-jsdoc生成JS API文档 具体的请看官网 https://github.com/krampstudio/grunt-jsdoc 一:首先确保本机电脑上是否已经安装了nodejs和np ...

  9. MongoDB .Net Driver(C#驱动) - 内嵌数组/嵌入文档的操作(增加、删除、修改、查询(Linq 分页))

    目录 一.前言 1. 运行环境 二.前期准备工作 1. 创建 MongoDBContext MongoDb操作上下文类 2.创建测试类 3.创建测试代码 三.内嵌数组增加元素操作 1.Update.S ...

随机推荐

  1. c# 用正则表达式在指定的字符串中每隔指定个数的文字插入指定字符串

    public static string AddNewLine(string inString,int num,string addString="\r\n") { return ...

  2. [原创].NET 业务框架开发实战之七 业务层初步构想

    原文:[原创].NET 业务框架开发实战之七 业务层初步构想 .NET 业务框架开发实战之七 业务层初步构想 前言:本篇主要讲述如何把DAL和BLL衔接起来. 本篇议题如下: 1.       DAL ...

  3. 开源 java CMS - FreeCMS2.1公布

    项目地址:http://www.freeteam.cn/ FreeCMS商业版V2.1更新功能 1.web页面信息採集:通过简单配置就可以抓取目标网页信息,支持增量式採集.keyword替换.定时採集 ...

  4. 90社交网络的行为报告后:不拒绝陌生人,TFBOYS作为一个喜爱

    依据腾讯QQ与易观合作的<2014中国90后青年调查报告>,盘点了90后使用社交网络的行为习惯. 相比于70.80后.90后更愿意在社交媒体上公布自己照片.状态,且更愿意在即时通讯中加陌生 ...

  5. 【LeetCode】3Sum 解决报告

    这个问题是我目前的知识回答,不来,只有良好的网上搜索解决方案,发现 K Sum 它是一类问题,但是,互联网是没有更简洁的代码,我想对于谁刚开始学习的人.您可能仍然想看看这个问题该怎么解决,然后看看他们 ...

  6. python 3.4.0 简单的print &#39;hello world&#39;,出错--SyntaxError: invalid syntax

    问题描写叙述: win7下安装的python 3.4.0版本号, 在命令行里写入简单的输出语句: print 'hello world' 然后enter,结果返回结果为: SyntaxError: i ...

  7. 一个关于Linux Bridge配置的吐嘈

    话说有些事情十分适合在放假前的一天折腾一天,但绝对不适合在你准备去吃饭前多看一眼...我上周就碰到了这么一件揪心的事,终于以低血糖收场.十分狼狈地四处觅食,却觅到了一包超级辣的鸡爪.吃完后感觉症状加重 ...

  8. ZOJ 3822 可能性DP

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3822 本场比赛之前,我记得.见WALK概率路DP称号.那么它应该是可以考虑 ...

  9. cuda vector addition

    http://webgpu.hwu.crhc.illinois.edu/ // MP 1 #include <wb.h> __global__ void vecAdd(float * in ...

  10. Pro Aspnet MVC 4读书笔记(2) - The MVC Pattern

    Listing 3-1. The C# Auction Domain Model using System; using System.Collections.Generic; using Syste ...