第04章 文档对象模型DOM教学板书文档格式.docx

上传人:b****6 文档编号:18263242 上传时间:2022-12-14 格式:DOCX 页数:31 大小:69.99KB
下载 相关 举报
第04章 文档对象模型DOM教学板书文档格式.docx_第1页
第1页 / 共31页
第04章 文档对象模型DOM教学板书文档格式.docx_第2页
第2页 / 共31页
第04章 文档对象模型DOM教学板书文档格式.docx_第3页
第3页 / 共31页
第04章 文档对象模型DOM教学板书文档格式.docx_第4页
第4页 / 共31页
第04章 文档对象模型DOM教学板书文档格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

第04章 文档对象模型DOM教学板书文档格式.docx

《第04章 文档对象模型DOM教学板书文档格式.docx》由会员分享,可在线阅读,更多相关《第04章 文档对象模型DOM教学板书文档格式.docx(31页珍藏版)》请在冰豆网上搜索。

第04章 文档对象模型DOM教学板书文档格式.docx

浏览器通过对HTML页面的解析处理,HTML文档中的元素便转化为DOM中的节点对象。

DOM中的节点有Document、Element、Comment、Type等不同类型,其中每一个DOM树必须有一个Document节点,并且为节点树的根节点。

它可以有子节点如Text节点、Comment节点等。

具体来讲,DOM节点树中的节点有元素节点、文本节点和属性节点等三种不同的类型,下面具体介绍。

1.元素节点(elementnode)

在HTML文档中,各HTML元素如<

body>

、<

p>

ul>

等构成文档结构模型的一个元素对象。

在节点树中,每个元素对象又构成了一个节点。

元素可以包含其它的元素,例如在下面的“购物清单”代码中:

<

ulid="

purchases"

>

<

li>

Beans<

/li>

Cheese<

Milk<

/ul>

所有的列表项元素<

都包含在无序清单元素<

内部。

其中节点树中<

html>

元素是节点树的根节点。

2.文本节点(textnode)

在节点树中,元素节点构成树的枝条,而文本则构成树的叶子。

如果一份文档完全由空白元素构成,它将只有一个框架,本身并不包含什么内容。

没有内容的文档是没有价值的,而绝大多数内容由文本提供。

在下面语句中:

Welcometo<

em>

DOM<

/em>

World!

/p>

包含“Welcometo”、“DOM”、“World!

”三个文本节点。

在HTML中,文本节点总是包含在元素节点的内部,但并非所有的元素节点都包含或直接包含文本节点,如“购物清单”中,<

元素节点并不包含任何文本节点,而是包含着另外的元素节点,后者包含着文本节点,所以说,有的元素节点只是间接包含文本节点。

3.属性节点(attributenode)

HTML文档中的元素或多或少都有一些属性,便于准确、具体地描述相应的元素,便于进行进一步的操作,例如:

h1class="

Sample"

WelcometoDOMWorld!

/h1>

…<

这里class="

、id="

都属于属性节点。

因为所有的属性都是放在元素标签里,所以属性节点总是包含在元素节点中。

注意:

并非所有的元素都包含属性,但所有的属性都被包含在元素里。

任何的格式良好的HTML页面中的每一个元素均有DOM中的一个节点类型与之对应。

利用DOM接口获取HTML页面对应的DOM后,就可以自由的操作HTML页面了。

下面以例4-1来说明一下DOM树的结构。

【例4-1】文档结构树。

head>

title>

文档标题<

/title>

/head>

ahref="

"

我的链接<

/a>

h1>

我的标题<

/body>

/html>

用DOM树结构来表示上面这段代码,如图4-1所示:

图4-1DOM树结构

上面所有的节点彼此间都存在关系。

除文档节点之外的每个节点都有父节点。

比方说,head和body的父节点是html节点,文本节点“我的标题”的父节点是p节点。

大部分元素节点都有子节点。

比方说,head节点有一个子节点:

title节点;

title节点也有一个子节点:

文本节点“文档标题”。

当节点分享同一个父节点时,它们就是同辈(同级节点)。

比方说,h1和a是同辈,因为它们的父节点均是body节点。

节点也可以拥有后代,后代指某个节点的所有子节点,或者这些子节点的子节点,以此类推。

比方说,所有的文本节点都是html节点的后代,而第一个文本节点是head节点的后代。

节点也可以拥有先辈。

先辈是某个节点的父节点,或者父节点的父节点,以此类推。

比方说,所有的文本节点都可把html节点作为先辈节点。

4.1.3document对象

每个载入浏览器的HTML页面都会成为document对象(即该HTML页面对应的DOM)。

document对象使我们可以通过JavaScript对HTML页面中的所有元素进行访问。

document对象是window对象的一部分,可通过window.document属性对其进行访问。

document对象代表一个浏览器窗口或框架中显示的HTML文件。

浏览器在加载HTML文档时,为每一个HTML文档创建相应的document对象。

document对象是window对象的一个属性,引用它时,可以省略window前缀。

document拥有大量的属性和方法,结合了大量子对象,如图像对象、超链接对象、表单对象等。

这些子对象可以控制HTML文档中的对应元素,使我们可以通过JavaScript对HTML页面中的所有元素进行访问。

通过document对象可以使用页面中的任何元素,也可以添加新元素、删除存在的元素。

下面来看看document的属性,见表4-1。

表4-1document对象的属性

属性名

作用

document.title

设置文档标题等价于HTML的<

标签

document.bgColor

设置页面背景色

document.fgColor

设置前景色(文本颜色)

document.linkColor

未点击过的链接颜色

document.alinkColor

激活链接(焦点在此链接上)的颜色

document.vlinkColor

已点击过的链接颜色

document.URL

设置URL属性从而在同一窗口打开另一网页

document.fileCreatedDate

文件建立日期,只读属性

document.fileModifiedDate

文件修改日期,只读属性

document.fileSize

文件大小,只读属性

document.cookie

设置和读出cookie

document.charset

设置字符集简体中文:

gb2312

在处理文档的时候,有几个函数和属性可以用来获取元素信息,最常用的函数如下:

document.write():

动态向页面写入内容;

document.createElement(Tag):

创建一个html标签对象;

document.getElementById(ID):

获得指定ID值的对象;

document.getElementsByName(Name):

获得指定Name值的对象集合。

childNodes是元素节点对象的一个属性,可以获取元素节点的所有直接子节点。

下面我们看一个例子。

【例4-2】childNodes属性的使用。

4-2<

scripttype="

text/javascript"

functiongetElements(){

varmainContent=document.getElementById("

main"

);

mainContent.style.backgroundColor='

#FF0000'

;

varparagraphs=document.getElementsByTagName("

p"

for(i=0;

i<

paragraphs.length;

i++){

paragraphs[i].style.fontSize='

2em'

}

varelements=document.getElementsByTagName("

body"

)[0].childNodes;

elements.length;

if(elements[i].nodeType==1&

&

elements[i].id)

alert(elements[i].id);

/script>

divid="

pclass="

intro"

Welcometomywebsite<

Wesellallthewidgetsyouneed.<

/div>

footer"

Copyright2006ExampleCorp,Inc.

inputtype="

button"

onclick="

getElements()"

value="

执行"

/>

在这个例子中,首先获取了ID为main的div元素节点,然后将背景色改成红色;

接着获取所有的p元素节点,通过遍历,把所有的字体都改成2em的;

最后遍历body的所有节点,通过对话框把每个元素节点的ID值依次显示出来。

document对象还有下面几个常用方法和属性:

open():

打开一个流,以收集来自任何document.write()或document.writeln()方法的输出;

close():

关闭用document.open()方法打开的输出流,并显示选定的数据;

write():

向文档写HTML代码或JavaScript代码;

writeln():

等同于write()方法,不同的是在每个表达式之后写一个换行符;

title:

该属性可以引用或设置页面中title标记内的内容。

其用法如下:

document.title="

newtitle"

//修改文档标题

document.open();

//开启文档

document.write("

somewords"

//写入数据

document.writeln("

document.close();

//关闭文档

【例4-3】document方法的使用。

4-3<

functionGreeting(){

varnewWin=window.open();

//获得id为“name”的DOM元素

varname=document.getElementById("

name"

with(newWin.document){

//通常这里的open()可以省略,在执行write前浏览器自动执行

//document.open()的动作

open();

write("

hello,"

+name.value+"

br/>

Nicetoseeyou!

somenotesforyou:

"

+

textarea>

hereissomemessage...<

/textarea>

+

buttononclick='

self.close()'

Goodbye!

/button>

close();

输入你的姓名:

text"

id="

buttononclick="

Greeting()"

Greeting<

上述页面中的按钮点击后将打开一个新的页面,并用document.write()方法向新的页面中写入HTML代码。

4.1.4获取DOM中的元素

DOM中定义了多种获取元素节点的方法,如getElementById()、getElementsByName()和getElementsByTagName()。

如果需要获取文档中的一个特定的元素节点,最有效的方法是getElementById()。

1.document.getElementById()

该方法通过元素节点的ID,可以准确获得需要的元素节点,是比较简单快捷的方法。

如果页面上含有多个相同id的元素节点,那么只返回第一个元素节点。

如今,已经出现了如prototype、Mootools等多个JavaScript库,它们提供了更简便的方法:

$(id),参数仍然是元素节点的id。

这个方法可以看作是document.getElementById()的另外一种写法。

在后面的章节中将详细介绍这些JavaScript库。

需要操作HTML文档中的某个特定的元素时,最好给该元素添加一个id属性,为它指定一个(在文档中)唯一的名称,然后就可以用该id属性的值查找想要的元素节点。

【例4-4】getElementById()方法的使用。

4-4<

functiongetValue(){

varx=document.getElementById("

myHeader"

alert(x.innerHTML)

h1id="

getValue()"

这是标题<

点击标题,会提示出它的值。

在这个例子中,我们取得id属性的值为myHeader的元素,点击该元素可显示出它的值。

2.getElementsByName()

document.getElementsByName(name)该方法与getElementById()方法相似,但是它查询元素的name属性,而不是id属性。

因为一个文档中的name属性可能不唯一(如HTML表单中的单选按钮通常具有相同的name属性),所以getElementsByName()方法返回的是元素节点的数组,而不是一个元素节点。

然后,我们可以通过要获取节点的某个属性来循环判断是否为需要的节点。

【例4-5】getElementByName()方法的使用。

<

4-5<

varx=document.getElementsByName("

myInput"

alert(x.length);

inputname="

type="

size="

20"

br/>

名为'

myInput'

的元素有多少个?

在这个例子中,我们获取了name为myInput的input元素节点数组,并将该数组的长度输出,输出的结果为3。

getElementById()和getElementsByTagName()这两种方法,可查找整个HTML文档中的任何HTML元素。

但这两种方法会忽略文档的结构,假如需要查找文档中所有的p元素,getElementsByTagName()会把它们全部找到,不管p元素处于文档中的哪个层次。

同时,getElementById()方法也会返回正确的元素节点,不论它被隐藏在文档结构中的什么位置。

例如:

document.getElementsByTagName("

会返回文档中所有p元素的一个节点数组,而document.getElementById('

maindiv'

).getElementsByTagName("

会返回所有p元素的一个节点列表,且这些p元素必须是id为maindiv的元素的后代。

(3)document.getElementsByTagName():

该方法是通过元素的标记名获取节点,同样该方法也是返回一个数组。

在获取元素节点之前,一般都是知道元素的类型的,所以使用该方法比较简单。

但是缺点也是显而易见,那就是返回的数组可能十分庞大,这样就会浪费很多时间。

它不是document对象的专有方法,还可以应用到其它的节点对象。

其语法为:

标签名称"

或document.getElementById('

ID'

获取节点数组时,通常要把此数组保存在一个变量中,就像这样:

varx=document.getElementsByTagName("

变量x就是包含着页面中所有p元素节点的数组,可通过它们的索引号来访问这些p元素节点,索引号从0开始,可以使用数组的length属性来循环遍历节点列表。

for(vari=0;

i<

x.length;

i++){

//这里可以操作相应的元素

}

要访问第三个p元素节点,可以这么写:

vary=x[2];

4.2在DOM元素间移动

获取一个元素节点以后,常常需要以该元素节点为基点上下左右地移动获取其它的元素节点,childNodes前面已经介绍过了,下面我们介绍其他的几种方式。

1.通过父节点获取

parentObj.firstChild:

如果节点为已知节点(parentObj)的第一个子节点就可以使用这个方法。

这个属性是可以递归使用的,也就是支持parentObj.firstChild.firstChild.firstChild...的形式。

parentObj.lastChild:

这个属性是获取已知节点(parentObj)的最后一个子节点。

与firstChild一样,它也可以递归使用。

parentObj.childNodes:

获取已知节点的子节点数组,然后可以通过循环或者索引找到需要的节点。

在IE上获取的是直接子节点的数组,而在Firefox上获取的是所有子节点即包括子节点的子节点。

parentObj.children:

获取已知节点的直接子节点数组。

在IE上,和childNodes效果一样,而Firefox不支持。

parentObj.getElementsByTagName():

它返回已知节点的所有子节点中类型为指定值的子节点数组。

不同的浏览器在处理DOM节点上是有差异的。

node"

Sometext.<

Somemoretext.<

在IE浏览器中搜索上面代码div的子节点应该为2个,但是在其他浏览器中,一共是5个节点(空格和回车换行也被看作节点)。

因此必须把所有的情况都考虑在内,检查节点的情况。

例如下面的代码:

varel=document.getElementById('

node'

varfirstElement=el.childNodes[0];

if(firstElement.nodeType!

=1)

firstElement=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1