javascript之DOM(一节点类型Node)
DOM(Document Object Model)是针对HTML和XML文档的一个API。DOM描述的是一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。起源于DHML,现为W3C的推荐标准。
IE中的所有DOM对象都是以COM对象的形式实现。
节点层次
DOM可以将任何HTML或XML文档描绘成一个有多层节点构成的结构。节点分为几种不同的类型,每种类型分别表示文档中的不同信息及标记。每个节点都有各自的属性,数据和方法,同时也与其他节点存在联系。所有页面标记表现为以一个特定节点为根节点的属性结构。
<html>
<head>
<title>Test</title>
</head>
<body>
<p>Hello,world!</p>
</body>
</html>
其中<html>元素为文档元素。文档元素时文档的最外层元素,文档中其他元素都包含在文档元素中,每个文档中只能有一个文档元素。HTML的文档元素一定是<html>,XML文档中没有预定义的文档元素,所以任何元素都可以成为文档元素。
HTML中元素通过元素节点来表示,属性通过属性节点表示,文档类型通过文档类型节点表示,注释则通过注释节点表示。共有12中节点类型,都继承自一个基类
1、Node类型
Node接口是由DOM的所有节点类型实现的,Node接口在javascript中是作为Node类型实现的,javascript中所有节点类型都继承自Node类型,因此所有节点类型都有相同的基本属性和方法。
Node.ELEMENT_NODE(1)//如果一个节点是元素类型,则该节点的nodeType==1
<p id="pd">Hello,world!</p>
<script type="text/javascript">
alert(pd.nodeType);//
alert(pd.nodeName);//p
</script>
说明p节点是Element类型
Node.ATTRIBUTE_NODE(2)//节点为属性类型
<p id="pd" name="test">Hello,world!</p>
<script type="text/javascript">
alert(pd.nodeType);//
alert(pd.nodeName);//
var p=document.getElementById("pd");
alert(p.getAttribute("name"));//test
alert(p.getAttributeNode("name").nodeType);//2
</script>
通过元素节点的getAttribute获取属性节点。
Node.TEXT_NODE(3)//文本节点,空格等字符串也算是文本节点
<p id="pd" name="test">Hello,world!</p>
<script type="text/javascript">
var p=document.getElementById("pd");
alert(p.firstChild.nodeValue);//Hello,world!
alert(p.firstChild.nodeType);//
</script>
元素节点下的第一个节点就是文本节点,所以可以用firstChild指向文本节点,然后在取节点的值。
Node.CDATA_SECTION_NODE(4)//xml文档中CDATA区域,CDATASection类型继承自Text类型
在xml文档,可以使用document.createCDATASetion()来创建CDATASetion类型
Node.COMMENT_NODE(8)//注释在DOM中是使用Comment来表示的
<p id="pd" name="test"><!--注释--></p>
<script type="text/javascript">
var p=document.getElementById("pd");
alert(p.firstChild.nodeValue);//注释
alert(p.firstChild.nodeType);//
</script>
使用父节点可以获取到注释。
Node.DOCUMENT_NODE(10)//javascript通过Document类型表示文档,Document类型表示整个HTML页面或xml页面
<p id="pd" name="test"><!--注释--></p>
<script type="text/javascript">
var h=document.documentElement;
alert(h===document.firstChild);//true
</script>
nodeName和nodeValue的值取决于,节点的类型。对于元素节点,nodeName的值为标签名,nodeValue的值为null;
节点关系:
每个节点都有一个childNodes属性,其中保存着一个NodeList对象。NodeList对象是一个类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点。NodeList对象在查询的过程中也可以修改。
<html>
<head>
<title>Test</title>
</head>
<body>
<p id="pd" name="test"><!--注释--></p>
<script type="text/javascript">
var h=document.documentElement;
var nodelist=h.childNodes;
for(var i=0;i<nodelist.length;i++)
{
if (nodelist.item(i).nodeType==Node.ELEMENT_NODE) {
alert(nodelist.item(i).nodeName);
}
} </script>
</body>
</html>
输出结果为HEAD,BODY,用于输出元素节点。h.childNodes取得了子节点序列。
每个节点都有父节点parentNode属性,该属性指向文档树中的父节点。包含在childNodes列表中的节点都有相同父节点,它们的parentNode属性指向同一个节点。上面的HEAD和BODY的父节点都为HTML。同时同在childNodes列表中的节点都是同胞节点,可以通过当前节点的previousSibling属性和nextSibling属性来访问前后属性。例如body.previousSibling.nodeName===#text
父节点的firstChild和lastChild属性分别指向childNodes列表中的首尾节点。
操作节点:
当前节点的appendChild方法可以为当前节点的childNodes列表末尾添加一个节点
<script type="text/javascript">
var h=document.documentElement;
var end=document.createElement("end");
h.appendChild(end);
alert(h.lastChild.nodeName);//输出为end
</script>
insertBefore方法可以将节点插入到确定位置
<script type="text/javascript">
var h=document.documentElement;
var end=document.createElement("end");
h.insertBefore(end,h.lastChild);//插入到最后一个节点的前面 alert(h.childNodes[h.childNodes.length-2].nodeName);
</script>
replaceChild()方法接收两个参数,一个是节点,一个是要替换的节点。
normalize处理节点
javascript之DOM(一节点类型Node)的更多相关文章
- JavaScript HTML DOM 元素(节点)
JavaScript HTML DOM 元素(节点) 创建新的 HTML 元素 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素 ...
- JavaScript之DOM创建节点
上几篇文章中我们罗列了一些获取HTML页面DOM对象的方法,当我们获取到了这些对象之后,下一步将对这些对象进行更改,在适当的时候进行对象各属性的修改就形成了我们平时看到的动态效果.具体js中可以修改D ...
- DOM Element节点类型详解
上文中我们讲解了 DOM 中最重要的节点类型之一的 Document 节点类型,本文我们继续深入,谈谈另一个重要的节点类型 Element . 1.概况 Element 类型用于表现 HTML 或 X ...
- JavaScript的DOM操作(节点操作)
创建节点createElement()var node = document.createElement(“div”);没什么可说的,创建一个元素节点,但注意,这个节点不会被自动添加到文档(docum ...
- JavaScript HTML DOM元素节点常用操作接口
在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType :节点的类 ...
- DOM Document节点类型详解
在前面 DOM 概况 中,我们知道了 DOM 总共有 12 个节点类型,今天我们就来讲下 DOM 中最重要的节点类型之一的 document 节点类型. 1.概况 Javascript 通过 Docu ...
- DOM之节点类型加例子
DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.换句话说,这是表示和处理一个HTML或XML文档的常用方法.D ...
- javascript之DOM(三Element类型)
Element类型用于表现XML和HTML的元素,提供了对元素标签名.子节点及特性的访问. 要访问标签名可以使用nodeName和tagName属性,其返回值是一样的. <p id=" ...
- javascript之DOM(四其他类型)
一.Text类型 文本节点由Text类型表示,指的是可以以字面意思解释的纯文本内容,其中包含HTML代码. nodeType=3 nodeName=#text nodeValue=文本内容 paren ...
随机推荐
- 开源推荐 - CoDo开源一站式DevOps平台
一群有梦想的年轻人开源了一个云管理平台,他们的口号是:让天下没有996的运维 有幸参与到CoDo项目的开发,这是一个非常棒的一站式开源运维平台,分享给大家 平台介绍 CODO是一款为用户提供企业多混合 ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎
小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为\(a_i\),且每个怪物血量均不相同,小豆手里有无限张"亵渎".亵渎的效果是对所有的怪造成\(1\)点伤害,如果 ...
- 关于RAMOS所用的操作系统
关于RAMOS所用的操作系统 RAMOS所用的操作系统,XP就不用说了,精简版最小的600MB到1.5GB的都有.现代意义上的WIN7/8/10 RAMOS一般选用精简版操作系统,节约内存的同时,还能 ...
- Spring Boot中整合Sharding-JDBC读写分离示例
在我<Spring Cloud微服务-全栈技术与案例解析>书中,第18章节分库分表解决方案里有对Sharding-JDBC的使用进行详细的讲解. 之前是通过XML方式来配置数据源,读写分离 ...
- 带lambda参数的宏定义
我们知道有些宏的参数是表达式,在DEBUG启用的使用,可以输出一些日志,在RELEASE的时候,可以节省性能. 如下的宏定义是基于lambda表达式,可以处理一些复杂的逻辑. #ifdef debug ...
- BizTalk增强型RosettaNet跟踪报告
BizTalk 的数据报表能力一直是比较弱的,好在Rosettanet 支持使用BAM 跟踪功能来跟踪各PIP消息状态.增强的跟踪功能能跟踪流程为消息.错误和事件.不可否认性的数据.可以根据跟踪的 ...
- tmp/ccdLyHub.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status
其实就是一个问题,gcc只能编译.c文件,你如果取名为.cpp,那么gcc编译就会就会出现这个错误. 这种情况下: 1.用g++编译(.c 或.c++都可以编译) 2.仍用gcc编译,但是文件后缀改为 ...
- 微信小程序常用样式汇总
本文系转载: 原文作者:chenzheng8975 原文地址:https://www.cnblogs.com/chenzheng8975/p/9605186.html 微信小程序常用样式汇总 小程序特 ...
- Flink及Storm、Spark主流流框架比较
转自:http://www.sohu.com/a/142553677_804130 引言 随着大数据时代的来临,大数据产品层出不穷.我们最近也对一款业内非常火的大数据产品 - Apache Flink ...
- First Step in luogu.
2019-11-21 21:58:32 在洛谷正式迈出第一步!!