首页 理论教育 DOMCoreAPI-基于Java Script网页编程

DOMCoreAPI-基于Java Script网页编程

时间:2023-10-18 理论教育 版权反馈
【摘要】:DOM是W3C制定的用于访问诸如XML和XHTML文档的标准。本附录中大部分关于DOM的概念均以HTML DOM的术语来讲解,这些概念同样适用于XML文档。上面的例子,可由图附录3.1表示它的DOM树:图附录3.1DOM树这棵节点树展示了节点的集合,以及它们之间的联系。

DOMCoreAPI-基于Java Script网页编程

DOM是W3C(万维网联盟)制定的用于访问诸如XML和XHTML文档的标准。“W3C文档对象模型(DOM)是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的平台和语言中立的接口。”

W3C DOM被分为3个不同的部分/级别(parts/levels):

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

➢XML DOM:用于XML文档的标准模型

➢HTML DOM:用于HTML文档的标准模型

DOM定义了所有文档元素的对象和属性,以及访问它们的方法(接口)。

其中,XML DOM是:用于XML的标准对象模型和用于XML的标准编程接口,它是中立于平台和语言W3C的标准。XML DOM定义了所有XML元素的对象和属性,以及访问它们的方法(接口)。换句话说:XML DOM是用于获取、更改、添加或删除XML元素的标准。而HTML DOM则定义了所有HTML元素的对象和属性,以及访问它们的方法(接口)。

由于HTML DOM是基于XML DOM的,同时又是对XML DOM的一种扩展,而我们在编写网页文档时如果按照XHTML语法规范来编写代码,则此网页文档可被视为格式良好的XML文档。这样在使用DOM访问网页文档时,即可使用XML DOM,也可使用HTML DOM。

本附录中大部分关于DOM的概念均以HTML DOM的术语来讲解,这些概念同样适用于XML文档。

1.DOM节点

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

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

➢每个标签是一个元素节点

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

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

➢注释属于注释节点

例附录3.1:

在这个例子中:

网页文档本身就是文档节点,又称根节点。

文中包含了很多标签,每个标签都是一个元素节点。

所有的元素节点中有一个元素节点很特殊,它位于标签层次结构的最外层,只能有一个,包含其他所有元素,这个特殊的元素节点叫根元素,在网页文档中,根元素总是<html></html>这一对标签。

<html></html>元素节点又包含了两个下级子节点,分别是<head></head>元素节点和<body></body>元素节点,而<head></head>元素节点又包含了一个下级子节点即<title></title>元素节点,而<body></body>子节点则包含了两个下级子点节,分别是<h1></h1>元素节点和<a></a>元素节点。

<title></title>元素节点包含了一个下级子点节,它是一个文本节点即“文档标题”这个字符串,同样<h1></h1>元素节点和<a></a>元素节点也分别包含了一个下级子节点,同样是文本节点“我的标题”和文本节点“我的链接”。

<a></a>元素节点还包含了一个属性节点,即href=http://www.***.com。属性节点实际上就是一个名/值对。

2.DOM节点树

DOM把文档视为一种包含了多个节点的树结构。这种树结构被称为节点树。可通过这棵树访问所有节点,可以修改或删除它们的内容,也可以创建新的节点。

上面的例子,可由图附录3.1表示它的DOM树:

图附录3.1 DOM树

这棵节点树展示了节点的集合,以及它们之间的联系。这棵树从根节点开始,然后在树的最低层级向文本节点长出枝条:节点树中的节点彼此之间都有等级关系。

父、子和同级节点用于描述这种关系。父节点拥有子节点,位于相同层级上的子节点称为同级节点(兄弟或姐妹)。

在节点树中,顶端的节点成为根节点。

根节点之外的每个节点都有一个父节点。

节点可以有任何数量的子节点。

叶子是没有子节点的节点。

同级节点是拥有相同父节点的节点。

注意:父节点:Parent Node;子节点:Children Node;同级节点:Sibling Node。

3.DOM接口及其属性和方法

DOM把文档模拟为一系列节点接口。可通过JavaScript或其他编程语言来访问节点。对DOM的编程接口是通过一套标准的属性和方法来定义的。

属性经常按照“某事物是什么”的方式来使用(例如节点名是“title”)。

方法经常按照“对某事物做什么”的方式来使用(例如添加“input”节点)。

➢DOM属性

一些典型的DOM属性:

x.nodeName:x的名称

x.nodeValue:x的值

x.parentNode:x的父节点

x.childNodes:x的子节点

x.attributes:x的属性节点

说明:在上面的列表中,x是一个节点对象。

➢DOM方法

一些典型的DOM方法:

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

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

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

说明:在上面的列表中,x是一个节点对象。

从上例中的<title>元素获取文本的JavaScript代码:

在此语句执行后,txt保存的值是“文档标题”。(www.xing528.com)

解释:

document:由解析器即浏览器创建的文档节点或称根节点,它实际上由Window的document属性提供。

getElementsByTagName("title")[0]:第一个<title>元素

childNodes[0]:title>元素的第一个子节点(文本节点)

nodeValue:节点的值(文本自身)

在上面的例子中,getElementsByTagName()是方法,而childNodes和nodeValue是属性。

4.访问节点

可以通过3种方法来访问节点:

通过使用getElementsByTagName()方法

通过循环(遍历)节点树

通过利用节点的关系在节点树中导航

➢getElementsByTagName()方法

getElementsByTagName()返回拥有指定标签名的所有元素。

语法:

下面的例子返回x元素下的所有<input/>元素:

注意:上面的例子仅返回x节点下的<input/>元素,x可能是网页内的一个表单。

要返回文档中的所有<title>元素,请使用:

注意:document就是文档本身(文档节点)。

getElementsByTagName()方法返回节点列表(node list)。节点列表是节点的数组。下面的代码可访问文档中的所有<meta/>元素,得到节点列表,存储在变量x中。

可通过下标访问x中的某个<meta/>元素。要访问第3个<meta/>,可以编写:

注意:下标以0起始。另外节点列表包含length属性定义节点列表的长度(即节点的数目)。你能够通过使用length属性来循环一个节点列表:

➢遍历节点

下面的代码循环根元素的子节点:

➢利用节点的关系进行导航

下面的代码通过利用节点的关系在节点树中进行导航:

5.节点信息

通过节点的属性可获取节点的信息。3个重要的DOM节点属性是:nodeName,nodeValue,nodeType。

➢nodeName属性

nodeName属性获取节点的名称。nodeName是只读的。元素节点的nodeName与标签名相同;属性节点的nodeName是属性的名称;文本节点的nodeName永远是#text。

➢nodeValue属性

nodeValue属性获取或设置节点的值。元素节点的nodeValue是undefined;文本节点的nodeValue是文本自身;属性节点的nodeValue是属性的值。

例子:下面的代码检索第一个<title>元素内部的文本节点的值:

例子:下面的代码更改第一个<title>元素的文本节点的值:

➢nodeType属性

nodeType属性规定节点的类型。nodeType是只读的。

最重要的节点类型见表附录3.1。

表附录3.1 节点类型

6.属性节点

属性节点比较特殊,它只属于元素节点,但不包含在元素节点的下级子节点列表之内。要获取元素的所有属性,可以访问元素节点的attributes属性从而得到属性节点列表。而属性节点列表支持getNamedItem()方法获得特定名称的属性节点对象,也可使用索引对属性节点列表进行遍历。

示例如下:

例附录3.2:

7.节点操作

➢创建节点

使用document文档对象的一系列方法可以创建各种节点。较常用的见表附录3.2。

表附录3.2 创建节点方法

➢添加节点

新创建的节点需要与其他已存在的节点组织关系,才能让它真正属于文档树。有多种方法为已有的节点添加节点,较常用的见表附录3.3。

表附录3.3 添加节点方法

例附录3.3:

➢修改节点

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

例附录3.4:

➢删除节点

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

例附录3.5:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈