JavaScript利用HTML DOM进行文档操作的方法


Posted in Javascript onMarch 28, 2016

HTML DOM 树

JavaScript利用HTML DOM进行文档操作的方法

一、DOM简介

DOM是W3C制定的用于访问诸如XML和XHTML等结构化文档的标准。

W3C文档对象模型(DOM)是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的平台和语言中立的接口

核心DOM:用于任何结构化文档的标准模型

XML DOM:用于XML文档的标准模型。是用于获取、更改、添加或删除XML元素的标准。

HTML DOM: 用于HTML文档的标准模型。定义了所有HTML元素的对象和属性,以及访问它们的方法(接口)。

二、DOM节点

根据DOM规范,文档中的每个成分都是一个节点。DOM的规定:

整个文档是一个文档节点,又称为根节点

每个标签是一个元素节点

包含在标签中的文本是文本节点

标签的每一个属性是一个属性节点

注释属于注释节点

2.1DOM接口及其属性和方法

DOM把文档模拟为一系列节点接口。可通过JavaScript或其他编程语言来访问节点。对

DOM的编程接口是通过一套标准的属性和方法来定义的。

2.1.1DOM属性

一些典型的DOM属性:

x.nodeName:x的名称

x.nodeValue:x的值

x.parentNode:x的父节点,,除了根节点外,只有唯一一个父节点

x.childNodes:x的子节点,可以有多个子节点

x.attributes:x的属性节点集合,可以有多个属性

其中,x是一个节点对象

2.1.2DOM方法

一些典型的DOM方法:

x.getElementsByTagName(name) :获取带有指定标签名称的所有元素

x.appendChild(node) :向x插入子节点

x.removeChild(node) :从x删除子节点

实例:

//获得文档标题的文本内容
document.getElementsByTagName("title")[0].childNode[0].nodeValue

2.1.3访问节点

方法一:通过使用getElementsByTagName()方法

方法二:通过循环遍历节点树

方法三:通过利用节点的关系在节点树中导航

2.1.4节点信息

nodeName : 获取节点的名称,是只读的。

nodeValue: 获取或设置节点的值

nodeType:节点的类型,是只读的。1,表示元素,2表示属性,3表示文本,8

表示注释,9表示文档

三、节点操作

3.1创建节点

createElement(tagName):创建元素节点

createTextNode(text):创建文本节点

createAttribute(attrName):创建属性节点

3.2添加节点

新创建的节点需要与其他已经存在的节点组织关系,才能让它真正属于文档树。

appendChild(node) 在当前节点内部最后一个子节点后面添加新的子节点,参数为新的子节点

insertBefore(newNode,node) 在当前节点内部指定的子节点之前添加新的子节点,第一个参数为新的子节点,第二个参数为当前节点内部指定的子节点

insertAfter()在当前节点内部指定的子节点之后添加新的子节点,第一个参数为新的子节点,第二个参数为当前节点内部指定的子节点

setAttributeNode()在当前元素节点设置属性节点,邀请调用此方法的节点的类型为元素类型,参数要设置的属性节点

示例:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用DOM创建并添加节点</title>
<script type="text/javascript">
function createAndAddNode(){
//div标签元素节点
var container = document.body.getElementsByTagName("div")[0];
//创建元素节点对象,元素名即标签名 <p>
var pEle = document.createElement("p");
//创建文本节点对象,文本内容就是参数值
var txtOfP = document.createTextNode("这是段落的文字");
//在元素节点内部添加一个文本节点<p>这是段落的文字
pEle.appendChild(txtOfP);
//在div元素节点后面添加新的子节点。<div><p>这是段落的文字</div>
container.appendChild(pEle);
//创建一个超链接标签节点
var aEle = document.createElement("a");
//创建文本节点
var txtOfA = document.createTextNode("博客园");
//在元素节点中添加文本节点,<a>博客园</a>
aEle.appendChild(txtOfA);
//创建一个href属性节点
var attrOfA = document.createAttribute("href");
//将href属性节点设置其属性值
attrOfA.nodeValue = "http:www.cnblogs.com";
//将属性节点添加到超链接元素节点中,即设置a元素标签的属性节点
aEle.setAttributeNode(attrOfA);
//将元素节点a添加到div中
container.appendChild(aEle);
}
//浏览器窗口加载时调用该方法
window.onload = createAndAddNode;
</script>
</head>
<body>
<div></div>
</body>
</html>

3.3修改节点

改变节点一般指改变元素内部的文本,或改变元素的属性值。这两种情况都可以在访问到文本节点或属性节点后,为其nodeValue赋值来实现更改。对于后者,还可以

在元素节点上调用setAttribute方法来实现属性值的改变。

示例:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用DOM改变节点</title>
<script type="text/javascript">
function changeSize(){
var target = document.getElementById("txt_1");
//设置列的属性值为50
target.setAttribute("cols", "50");
//设置行的属性值为6 先访问属性节点集合,然后通过getNamedItem定位属性名,
target.attributes.getNamedItem("rows").nodeValue = "6";
}
function changeText() {
var target = document.getElementById("lbl_1");
//先访问该元素节点的子节点,子节点个数可以是多个,因此用了数组下标访问指定元素。然后通过nodeValue修改其值
target.childNodes[0].nodeValue = "您的个人简历:";
}
</script>
</head>
<body>
<form action="">
<label id="lbl_1" for="txt_1">多行文本框的标签文字</label>
<textarea id="txt_1" ></textarea>
<input type="button" name="btn" value="改变多行文本域的尺寸" onclick="changeSize();" />
<input type="button" name="btn" value="改变标签的文字" onclick="changeText();" />
</form>
</body>
</html>

3.3删除节点

删除节点一般指从元素节点内部删除子元素或元素包含的文本,也可实现对元素节点包含的属性节点的删除

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用DOM删除节点</title>
<script type="text/javascript">
function doRemoveNode() {
//label标签元素节点
var targetLbl = document.getElementById("lbl_1");
//从label元素节点中删除第一个子节点
targetLbl.removeChild(targetLbl.firstChild);
//文档元素,通过访问文档元素集合,指定位置元素获得多行文本域
var tagetArea = document.documentElement.getElementsByTagName("textarea")[0];
//文档中第一个form标签元素节点
var tagetForm = document.documentElement.getElementsByTagName("form")[0];
//删除文档中第一个form标签中的textarea
tagetForm.removeChild(tagetArea);
}
</script>
</head>
<body>
<form>
<label id="lbl_1" for="txt_1">多行文本框的标签文字</label>
<textarea id="txt_1" rows="" cols=""></textarea>
<input type="button" name="btn" value="删除节点" onclick="doRemoveNode();"/>
</form>
</body>
</html>

四、小结

DOM是文档在内存中表现的树形结构,称为DOM树;DOM是W3C制定的访问文档的标准方法和属性,称为DOM接口
文档中的每个数据在树形结构上表示为一个节点,由所有节点组成的树形结构称为节点树或DOM树
节点有多种类型,常见的有元素节点、属性节点、文本节点、根节点、等。节点有名称和值,但不同类型的节点其名称和值含义不同

createElement()方法用于创建元素节点,createAttribute()方法用于创建属性节点,createTextNode()方法用于创建文本节点,向元素节点内添加子元素节点或文本节点,可使用appendChild()方法。还有insertAfter()和insertBefore()方法用于在特定的节点前后插入新的节点。需要注意的是为元素节点添加属性节点的方法却是setAttributeNode()方法。

要修改文本节点的值或更改属性节点的值,应使用节点的nodeValue属性

删除节点使用removeChild()方法。

关于JavaScript利用HTML DOM进行文档操作的方法,小编就给大家介绍这么多,希望对大家有所帮助!

Javascript 相关文章推荐
JavaScript 私有成员分析
Jan 13 Javascript
jquery ajax 同步异步的执行示例代码
Jun 23 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
Jun 08 Javascript
使用时间戳解决ie缓存的问题
Aug 20 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
Oct 19 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 Javascript
jsTree使用记录实例
Dec 01 Javascript
基于canvas的二维码邀请函生成插件
Feb 14 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
Aug 14 Javascript
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
用Cordova打包Vue项目的方法步骤
Feb 02 Javascript
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
JavaScript常用本地对象小结
Mar 28 #Javascript
Bootstrap 粘页脚效果
Mar 28 #Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 #Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
Mar 28 #Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
Mar 28 #Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 #Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
Mar 28 #Javascript
You might like
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
Vue实现路由跳转和嵌套
2017/06/20 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
Python入门篇之数字
2014/10/20 Python
Python 多线程的实例详解
2017/09/07 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python基于property()函数定义属性
2020/01/22 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
jupyter 添加不同内核的操作
2021/02/06 Python
跟单文员的岗位职责
2013/11/14 职场文书
入党自我鉴定
2014/03/25 职场文书
《长征》教学反思
2014/04/27 职场文书
空气的环保标语
2014/06/12 职场文书
超市创意活动方案
2014/08/15 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL