什么是DOM
DOM:Document Object Model(文档对象模型)是W3C组织推荐的处理可扩展置标语言的标准编程接口。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,计有VBScript、ActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作。详细请参百度百科 http://baike.baidu.com/view/14806.htm
DOM有什么用
DOM的作用是将标记文档(如 HTML, XML)封装成对象,并将标记型文档中的所有内容(标签,文本,属性等)都封装成对象。封装成对象的目的是为了更为方便的操作这些文档,以及文档中的所有内容。因为对象的出现,就可以有属性和行为被调用。
文档对象模型
文档:标记型文档(HTML, XML)。
对象:封装了属性和行为的实例,可以被直接调用。
模型:所有标记型文档都具备一些共性的一个体现。
介绍完DOM,现在来讲讲它的工作原理吧!
DOM这种技术是如何对标记型文档进行操作的呢?
要操作标记型文档,就必须要先对其解析。下面让我们看看DOM解析流程的图,
从这张图我们可以看到,DOM技术的解析方式是将标记型文档解析成一棵DOM树,并将树中的内容都封装成节点对象。这完全就是一种面向对象的设计的一种方法,万物 皆对象!
不得不夸一下前人的远见。
任何事物具有两面性,DOM技术也不例外。
好处:可以对树中的节点进行任意的操作,比如(增 删 改 查)
弊端:这种解析方式需要将整个标记文档加载进内存,意味这如果标记型文档体积过大,较为浪费内存空间。
这时强大的前人又有新招啦!
正所谓高手在民间,一些民间组织定义了一种叫SAX解析方式,
什么叫SAX呢?
这是一基于事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。
SAX与DOM对比
与DOM相比,SAX解析器能提供更好的性能优势,它提供对XML文档内容的有效低级访问。SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。另外,你无需像在DOM中那样为所有节点创建对象。最后,SAX“推”模型可用于广播环境,能够同时注册多个ContentHandler,并行接收事件,而不是在一个管道中一个接一个地进行处理。
SAX的缺陷
SAX的缺点是你必须实现多个事件处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为SAX解析器不能交流元信息,如DOM的父/子支持,所以你必须跟踪解析器处在文档层次的哪个位置。如此一来,你的文档越复杂,你的应用逻辑就越复杂。虽然没有必要一次将整个文档加载到内存中,但SAX解析器仍然需要解析整个文档,这点和DOM一样。
这里不打算细将SAX后面学到XML时会详细分析的。
DOM的三种模式:
DOM1:将HTML文档封装成对象。
DOM2:加入了一些新功能,比如解析名称空间。
什么叫名称空间呢?别急,我会为你详细说明:
当出现同名的标签,标签代表的含义不同时,容易出现冲突,这时我们可以定义一个所属,不同所属存储同名而不同含义的标签。这相当于java的两个同名.class需要放在两个不同的包里。
语法如下,没table标签定义一个所属并取名,这个所属就是名称空间
<html xmlns=”A”>
<table></table>
</html>
<html xmlns=”B”>
<table></table>
</html>
DOM3:将XML文档封装成对象。