DOM基础知识一【简介】

DOM即Document Object Module(文档对象模型)的简称。根据W3C DOM规范,DOM是一个独立于语言,浏览器以及平台的应用程序编程接口。通过该接口,应用程序可以访问并更改文档的内容,结构和样式。例如:可以通过javascript来添加,移动,改变或移除页面上的项目,从而重构整个HTML文档。

     DOM有三个级别:DOM Level1,DOM Level2,DOM Level3

     ^ DOM Level1以映射文档结构为目标,由DOM核心和DOM HTML两个模块组成。

     ^ DOM Level2添加额命名空间支持,增加了几个模块以支持级联样式表,事件以及增强树的操作。

     ^ DOM Level通过引入统一方式载入,保存和检验文档方法对DOM进行进一步扩展,扩展后,DOM核心可支持XML1.0所有内容,包括XML Infost , XPath 和 XML Base。   

    当阅读与DOM有关的材料时可能会遇到参考0级DOM的情况。需要注意的是,并没有哪个标准被称为0级DOM,它仅是DOM历史上一个参考点。

    DOM按照标准不同被分为不同的部分,即DOM Core , XML DOM 和 HTML DOM 等,其中,Core DOM定义了一套标准的针对任何结构化文档的对象;XML DOM定义了一套标准的针对XML文档的对象;HTML DOM定义了一套标准的针对HTML文档的对象。

    1.HTML DOM中的节点树

    在DOM中,HTML文档的层次结构都被映射为一个树形结构,文档的每一个成分都是这棵树中的节点(node)。其中,整个文档是一个文档节点(Document),每个HTML标签是一个元素节点(Element),每个标签中的属性是一个属性节点(Attr),文本是一个文本节点(Text),注释属于注释节点(Comment)。如下图:

 

这棵树就像家谱一样,有父节点,兄弟节点和子节点,节点与节点之间都是有关系的,如图树中,除了文档节点外,其他每个节点都有一个父节点,如<head>和<body>的父节点是<html>。除了文本节点和属性节点外,其他大部分节点都有子节点,如<p>节点就有一个文本节点“my content”。当一个节点和其他节点有一个共同的父节点时,就称这个节点为其他节点的兄弟节点,如<head>就是<body>的兄弟节点,当然,节点也可以拥有后代和先辈,对于一个节点来说它的所有子节点以及子节点的子节点都是它的后代,它的父节点以及父节点的父节点都是它的先辈。例如<title>,<head>,<a>以及所有的文本节点都是<html>节点的后代,同时,<html>节点反过来就是它的先辈。

      任何一个格式良好的html,文件中的每一个元素均为DOM文档中的一个节点类型与之对应。利用DOM接口将HTML文件转化成DOM文档后,就可以通过程序自由地处理HTML文件的内容和样式了。

2,DOM的4个基本接口

    DOM利用对象来把文档模型化,这些模型不仅描述了文档的结构,还定义了模型中对象的行为。也就是说,在DOM中,节点不仅仅是数据结构中的节点,而是对象,对象中包含属性和方法。在DOM中,对象模型要实现用来表示和操作文档的接口,接口的行为和属性,接口之间的关系以及互操作。

   在DOM接口规范中,有Document,Node,NodeList以及NamedNodeMap这4个基本接口。

   1,Document接口

        Document接口代表了整个文档,它是整棵文档树的根,提供了对文档树中的节点进行访问和操作的入口。

  

        由于元素,文本,注释,处理指令等节点都不能脱离文档树的上下文关系而独立存在,所以在Document接口中提供了创建这些节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Docment之间的联系。

   2,Node接口

        Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的。例如:Element,Attr,CDATASection等接口都是从Node继承过来的。在DOM树中,Node接口代表了树中的每一个节点,提供了访问DOM树中各个节点的属性和方法,并给出了对DOM树中的元素进行遍历的支持。

   3,NodeList接口

       NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,如某个节点的子节点序列,另外,它还出现在一些方法的返回值中,如getElementByTagName()。

       在DOM中,NodeList的对象是动态的。换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如:通过DOM获得某个元素节点一个NodeList对象,该对象中包含了这个元素节点的所有子节点,那么,当再通过DOM对该元素节点进行操作(添加,删除,移动节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再执行其他额外的操作。

       NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。

      4,NamedNodeMap接口

      通过NamedNodeMap接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点,这个接口主要用在属性节点的表示上。

      实现了NameNodeMap接口的对象中,包含了可以通过名字来访问的一组节点的集合。这和NodeList接口类似,但它并不是从NodeList继承过来的。它所包含的节点集合中的节点是无序的,尽管这些节点也可以通过索引来进行访问。不过,该接口提供了枚举集合中所包含节点的一种简单方法。

      另外与NodeList相同,NameNodeMap对象也是动态的。

3,DOM基本对象的常用属性好方法

     DOM中的基本对象有5个,即Document,Node,Nodelist,Element,Attr.

     (1)Document对象:是一个DOM文档的根节点,它的属性和方法有很多,不过大多是针对HTML文档的。

 

 (2)Node对象

      在DOM中,文档的每一个节点都被视为一个Node对象。同样,Node对象也拥有一系列属性和方法。通过这些属性和方法可以更好地遍历整个文档。

   

    

3,NodeList对象

    NodeList对象代表一个包含一个或者多个Node对象的列表,可以简单地把它看成一个Node对象的数组。可以通过GetLength()方法来返回列表额长度,通过Item(int)方法来返回指定位置的Node对象。

4,Element对象

    对于Element对象,DOM也为之定义了一系列属性和方法。通过这些属性和方法,可以轻松地完成对一个Element节点的属性( Attr节点)的操作。Element对象有一个常用属性——tagName,它用于返回元素节点的标记名称,如<p>元素的tagName值为P,HTML文档返回的tagName均为大写。Element对象的常用方法有很多。

 

  5,Attr对象

 Attr对象代表了某个Element节点的属性。Attr对象也是一种节点,因此它继承Node对象的属性和方法。不过属性无法拥有父节点,同时属性也不被认为是Element节点的子节点,对于许多Node对象的属性来说都将返回null。也就是说,Attr对象其实是被看做是包含它的Element对象的一部分,它并不作为DOM树中单独的一个节点出现。这一点在使用的时候要同其他Node子对象相区别。

 

posted @ 2013-12-09 11:19  行进  阅读(246)  评论(0编辑  收藏  举报