我们通常在做WEB编程时,一般用的的是基于文本的思维方式,即用点记法来访问和设置,如:document.all.id.value = “value”
那些不支持W3C DOM的浏览器,以及完全不支持DOM的浏
览器,支持的就是这种Web编程的思维方式(基于文本的Web编程)。
在W3C的DOM标准出现之前,Micrsoft和Netscape的IE4和NS4都各有一套自己的DOM标准,所以在遵照WEB标准开发时,应该针对主要支持W3C的DOM标准的浏览器:
Netscape 6.0+、Mozilla 0.9+
IE/Win 5+、IE/Mac 5+
Opera7+
以及其它一些用户数量极少的浏览器
DOM标准(文档对象模型)的思维方式是基于DOM的WEB编程
在DOM看来,HTML文档的层次结构,被表示为树型结构。树的节点表示
文档中的各种内容
下面就说说WEB标准开发中的一些基本用法:
1. 获取控件:
【document.getElementsByTagName()】
DOM中document.getElementsByTagName("body")[0]引用<body>元素。
调用getElementsByTagName()将返回一个数组,这里返回的数组元素是文档中所有<body>元素,由于HTML文档只能有一个<body>元素,
所以我们只对返回数组的第一个元素感兴趣。
document.getElementsByTagName()返回元素的顺序就是它们出现在文档中的顺序。例如
[1]要找到HTML文档中所有的<table>元素
var tables = document.getElementsByTagName("table");[2]找到文档中所有的元素
var allElements = document.getElementsByTagName("*");//IE5和IE5.5不支持这种特殊用法【document.getElementById()】
getElementById()只返回一个元素(因为每个id属性的指唯一),该元素具有匹配的id属性。
例如
[1]找到id属性为p2的<P>元素
<p id="p1">the first p</p>
<p id="p2">the second p</p>
<p id="p3">the thied p</p>var somep = document.getElementById("p2");
【注意1】
Element对象也定义了一个Element.getElementsByTagName()方法,该方法和document.getElementsByTagName()类似。
不过Element.getElementsByTagName()返回的该元素是调用它的那个元素的子元素(详情见document.getElementsByTagName和Element.getElementsByTagName区别.html)。
例如
[1]用document.getElementById()找到特定的元素,然后用Element.getElementsByTagName()在那些特定标记中找到所有给定【类型】的子元素。
//找到id属性为toc的<table>元素
var aTable = document.getElementById("toc");//因为<table>有后代<tr>,而<tr>代表一行,所以我们定义个名为rows的变量,这里返回的是一个<tr>数组。
//如果该文档共有两个<table>,那么rows只是其中一个<table>的<tr>数组。
var rows = aTable.getElementsByTagName("tr");//如果该文档共有两个<table>,那么rows就是所有<table>的<tr>数组。
var rows = document.getElementsByTagName("tr");【注意2】
HtmlDocument对象还定义了getElementsByName()方法(注意是ByName,不是ByTagName)。
该方法的功能类似于document.getElementsById(),
不同的是该方法的参数是元素的name属性(不是id属性)
由于一个文档中的name属性可能不唯一(比如一组radio的name属性一样),
所以HtmlDocument.getElementsByName()返回的是元素的数组,而document.getElementsById()返回的是一个元素。
例如
<a name="top" href="">firsta</a>
<a name="top" href="">seconda</a>
<a name="top" href="">thirda</a>var links = document.getElementsByName("top"); //找到所有名为top的<a>
var firsta = links[0]; //找到第一个名为top的<a>
2. 如果上面的控件是个标签,获取他的内容:
Var text = element.childNodes[0];
3. 设置控件的属性:
a) 除了style、class以及事件响应属性外,其他的属性都可以如下设置:
Element.setAttribute(“readOnly”,”true”);
b) 设置class属性:
Element.setAttribute(“calssName”,”test”);
c) 设置事件响应属性:(attachEvent()是IE才支援的方法,而在Mozilla中就要用addEventListener()。)
Element.attachEvent(“onclick”,test); (不支持 IE5/Mac)
Element.addEventListener("eventType", listenerReference, captureFlag); (不支持 IE5/Mac)
(第一个参数是一个声明事件类型的字符串(不带"on"前缀),比如 click,mousedown,和 keypress。addEventListener() 方法的第二个参数可以和早些时候描述过的函数引用同样对待。第三个参数则是一个 Boolean 值,指明该结点是否以DOM中所谓的捕捉模式---综合起来称为事件的传播--最后由另一篇文章来描述。对于一个典型的事件侦听器来说,第三个参数应该为 false(假)。)来侦听事件。事件的捕捉和派发