首页 > JavaScript > What is DOM ?
2009十二月13

What is DOM ?

文档对象模型(Document Object Model,DOM)是表示文档和访问,操作构成文档的各种元素的应用程序接口。启用JavaScript的Web浏览器都定义了文档对象模型。貌似现在主流浏览器默认的脚本语言都是JavaScript。

JavaScript最常做的事其实就是操作DOM:无论是读取DOM元素的值,还是创建新的DOM元素,或者就是更改DOM元素的样式。所以学习DOM是很有必要的。

网上相关的文章很多,我这里只是一个简介,各种复杂的应用后面的日志中会陆续提到,咱们一点一点的来学习吧~

将文档表示为树

HTML文档的递归形式决定了它的树状拓扑结构,其节点对应文档中的各种结构。在DOM中,HTML文档的层次结构被表示为树形结构。其树的节点表示文档中的各种内容包括标签(如、,

等)、文本和注释。

一个HTML文档对应的DOM节点树形结构大致如图:

DOM HTML TREE(点击小图看大图)

DOM HTML TREE(点击小图看大图)

The Node Of DOM

文档中不同的结构类型分别对应不同类型的DOM节点,在JavaScript中这些节点是作为实现了特定的Node接口的DOM对象来操作的。每个Node对象都有nodeType属性,这些属性指定节点的类型。

下表列出了HTML文档中常见的节点类型和它们的nodeType的值:

NodeType
整数值
Named Constant
节点类型常量
1 ELEMENT_NODE
2 ATTRIBUTE_NODE
3 TEXT_NODE
4 CDATA_SECTION_NODE
5 ENTITY_REFERENCE_NODE
6 ENTITY_NODE
7 PROCESSING_INSTRUCTION_NODE
8 COMMENT_NODE
9 DOCUMENT_NODE
10 DOCUMENT_TYPE_NODE
11 DOCUMENT_FRAGMENT_NODE
12 NOTATION_NODE

因为这些子接口都是继承自Node接口。下图将显示核心DOM API的部分类层次,以体现其继承关系。具体其常量是继承自哪个接口,大家注意看上表的第二列——节点类型常量:

PART OF DOM API(点击小图看大图)

PART OF DOM API(点击小图看大图)

DOM的通用属性和方法

DOM对象具有某些能用的属性和方法,其由Node接口定义。Node接口为了遍历和操作树定义了属性和方法。

  1. 属性:
  2. Node对象的childNodes属性将返回子节点的列表,firstChild、lastChild、nextSibling、previousSibling和parentNode其分别表示节点的第一个和最后一个儿子、前一个和后一个兄弟(可以理解为哥哥和弟弟),以及父亲,它们提供了遍历树的方法。

  3. 方法:
  4. 同时appendChild()、removeChild()、replaceChild()和insertBefore()方法使你能给文档添加或删除节点。

在后面的日志中我会具体介绍这些属性和方法的使用的。

attribute,元素的属性

用Element接口的getAttribute()方法、setAttribute()方法和removeAttribute()方法可以查询、设置并删除一个元素的属性。

虽然Node接口也提供了getAttributeNode()方法,但是用起来不够方便,其将返回一个表示属性和它的值的Attr对象,这里略过不讲。

下面的例子,我使用下面的方法来设置元素的属性,并且删除这个属性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> getAttribute(),setAttribute(),removeAttribute()的使用 </TITLE>
 </HEAD>

 <BODY>
    <div id='xxx' name='这是原来的name属性啊'>这是一个div元素,最开始就有name属性</div>
    <input type='button' value='读取div的name属性' onclick='getName();' />
    <input type='button' value='设置div的name属性' onclick='setName();' />
    <input type='button' value='删除div的name属性' onclick='removeName();' />
    <script type='text/javascript'>
        function getName(){
            alert(document.getElementById('xxx').getAttribute('name'));
        }

        function setName(){
            document.getElementById('xxx').setAttribute('name','这是我设的name属性哦');
        }

        function removeName(){
            document.getElementById('xxx').removeAttribute('name');
        }
    </script>
 </BODY>
</HTML>

在线演示地址

啰嗦和总结

这次咱不用“唠叨”这个词了。呵呵。咱用的是“啰嗦”。DOM这一系列日志会写几天,因为其很重要,小小子也是一边学,一边抄,一边写。之前总是对其一知半解,希望这次系统的记录这些日志会对其有深刻的印象。嗯。

PS:上面的图可是我自己画的哦,抄了书上的,也看了W3School的,总之尽量给大家留下些印象,呵呵。

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/12/13/1668/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)