DOM对象模型

是针对HTML与XML的API,代表和操作文档的内容。

一.简介

D:代表文档。作用是把编写的网页文档换为一个文档对象。

O:代表对象。Javascript对象有三种类型:用户定义对象(由程序员自行创建的对象),内建对象(内建在javascript语言里的对象,ECMA-262只定义了两个内置对象,即Global和Math(它们也是本地对象,根据定义,每个内置对象都是本地对象),本地对象就是ECMA-262定义的类(引用类型)。它们包括:

ObjectFunctionArrayStringBooleanNumberDateRegExp

ErrorEvalErrorRangeErrorReferenceErrorSyntaxErrorTypeErrorURIError

宿主对象(由浏览器提供的对象,所有BOM和DOM对象都是宿主对象)。

M:代表模型。某种事物的表现形式,DOM代表着加载到浏览器窗口的当前网页,浏览器提供了网页的模型,因此就可以通过javascript去读取这个模型(地图)。

二.Node类型。

DOM1定义了一个Node接口,该接口将由DOM中的所有节点类型实现。

一副图来说明文档节点的部分层次结构

Dom树,树形的根部是Document节点,它代表整个文档,代表HTML元素的节点是Element节点,代表文本节点的是Text节点,如上图,下面的节点都是Node的子类。

图说明的节点之间的关系:

每个节点都要有一个childNodes属性,其中保存着一个NodeList对象。Nodelist是一种类数组对象,是基于DOM结构动态执行查询的结果。它访问节点,可以通过方括号,也可以使用item()方法。

刚开始接触以及常用的节点类型:元素节点,文本节点,属性节点。

用一副图来解释这几个节点<ptittle=”thisisapara”>我是文本节点的内容</p>

DOM几个常用方法:

三.选取文档元素

(1)通过ID选取元素:getElementById();该函数是document对象特有的函数,参数只有一个,必须放在单引号,或者双引号里面,返回值是有着该参数的元素节点对应的对象。

(2)通过标签名获取元素:getElementsByTagName();也是只有一个参数,参数是标签的名字,但是它返回的是一个对象数组(Nodelist对象),即使整个文档里这个标签只有一个元素,也是返回一个数组,只是这时的数组长度为1,。

(3)通过css类选取元素:getElementsByClassName();也是只接受一个参数,及类名,要指定多了类名时,只要在字符串参数中,用空格分隔开来就行

如element.getElementsByClassName("class2class1")将选取elements后代元素中同时应用了class1和class2样式的元素(样式名称不区分先后顺序),返回也是一个对象数组(Nodelist对象),对应着文档里的一组特定元素节点。

(4)通过名字选取元素:getElementsByName();也是一个参数,name的名称,返回一个对象数组(Nodelist对象)。Name属性,只在少数的HTML元素中有效,比如:表单,表单元素,<iframe>,<img>元素。这是因为name属性是为了方便提交表单数据而打造。并且,getElementsByName()方法,不在Document类中,只是针对HTML文档可用,在XML中却不能用。

(5)、通过CSS选择器选取元素:document.querySelectorAll("selector")其中,selector为合法的CSS选择器,比如:通过#id,.class,p[tittle=”aaa”],vartest=document.querySelectorAll("#test");通过这样获得对象那个后,再继续操作。等等。返回值也是一个对象数组(Nodelist对象)。

这些原生的元素选取的方法比jQuery要快很多。

四.获取和设置属性。

(1)getAttribute();只有一个参数,打算获得的属性的名字;

(2)setAttribute();允许对属性节点值做出修改。使用方法:object.setAttribute(attribute,value);

简单使用例子代码如下:

效果图: