﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-梦在飞-文章分类-DOM</title><link>http://www.blogjava.net/vso/category/19442.html</link><description>JAVA EE</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:11:18 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:11:18 GMT</pubDate><ttl>60</ttl><item><title>dom教程</title><link>http://www.blogjava.net/vso/articles/95589.html</link><dc:creator>vso</dc:creator><author>vso</author><pubDate>Tue, 23 Jan 2007 10:17:00 GMT</pubDate><guid>http://www.blogjava.net/vso/articles/95589.html</guid><wfw:comment>http://www.blogjava.net/vso/comments/95589.html</wfw:comment><comments>http://www.blogjava.net/vso/articles/95589.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vso/comments/commentRss/95589.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vso/services/trackbacks/95589.html</trackback:ping><description><![CDATA[引用：<br /><a href="http://www.w3pop.com/tech/school/htmldom/default.asp">http://www.w3pop.com/tech/school/htmldom/default.asp</a><img src ="http://www.blogjava.net/vso/aggbug/95589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vso/" target="_blank">vso</a> 2007-01-23 18:17 <a href="http://www.blogjava.net/vso/articles/95589.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOM 精简知识教程</title><link>http://www.blogjava.net/vso/articles/95585.html</link><dc:creator>vso</dc:creator><author>vso</author><pubDate>Tue, 23 Jan 2007 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/vso/articles/95585.html</guid><wfw:comment>http://www.blogjava.net/vso/comments/95585.html</wfw:comment><comments>http://www.blogjava.net/vso/articles/95585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vso/comments/commentRss/95585.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vso/services/trackbacks/95585.html</trackback:ping><description><![CDATA[先来看一张简单的文档树<br /><a class="page" href="http://www.98xj1.com/dom/img/nodes1.gif" target="_blank"><img alt="click for full size" src="http://www.98xj1.com/dom/img/nodes1.gif" border="0" /></a><br />很明显树的顶层节点是NodeA节点,接下来可以通过指定的合适节点移动到树中的任何点,结合以下的代码你可以更好的了解这棵树节点间的相互关系:<br />NodeA.firstChild = NodeA1 <br />NodeA.lastChild = NodeA3 <br />NodeA.childNodes.length = 3 <br />NodeA.childNodes［0］ = NodeA1 <br />NodeA.childNodes［1］ = NodeA2 <br />NodeA.childNodes［2］ = NodeA3 <br />NodeA1.parentNode = NodeA <br />NodeA1.nextSibling = NodeA2 <br />NodeA3.prevSibling = NodeA2 <br />NodeA3.nextSibling = null <br />NodeA.lastChild.firstChild = NodeA3a <br />NodeA3b.parentNode.parentNode = NodeA<br /><br />DOM定义对操作一个文档对象的节点结构提供了实用的方法,它提供了像执行对象插入,更新,删除,克隆等这些常用的方法。<br />insertBefore()--在参考子节点之前插入一个新的子节点.如果参考的子节点为null,则新的子节点将作为调用节点的最后一个子节点插入。<br />replaceChild()--在childNodes集合种使用指定的newChild来代替oldChild;如果代替成功,则返回oldChild;如果newChild是null,则只需删除oldChild即可。<br />removeChild()--从节点的ChildNodes集合中删除removeChild指定的节点,如果删除成功,则返回删除的子节点。<br />appendChild()--添加一个新节点到childNodes集合的末尾,如果成功,则返回新节点。<br />cloneNode()--创建一个新的、复制的节点,并且如果传入的参数是true时,还将复制子节点,如果节点是一个元素,那么还将复制相应属性,返回新的节点。<br /><br />为了在一棵文档树中访问或者建立一个新的节点,可以用下面这些方法:<br />getElementById()<br />getElementsByTagName()<br />createElement()<br />createAttribute()<br />createTextNode()<br />注意:在一个页面中只有一个文档对象,除了getElementsByTagName()外,其它方法均只能通过document.methodName()调用。<br /><br />再看一下下面这个例子:<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;p&gt;This is a sample paragraph.&lt;/p&gt;<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />&lt;!--<br />alert(document.documentElement.lastChild.firstChild.tagName);<br />//--&gt;<br />&lt;/SCRIPT&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />结果将会显示"P",下面是一些解释<br />document.documentElement - gives the page's HTML tag. <br />lastChild - gives the BODY tag. <br />firstChild - gives the first element in the BODY. <br />tagName - gives that element's tag name, "P" in this case.<br />另一个:<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br /><br />&lt;p&gt;This is a sample paragraph.&lt;/p&gt;<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />&lt;!--<br />alert(document.documentElement.lastChild.firstChild.tagName);<br />//--&gt;<br />&lt;/SCRIPT&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />这个例子和上面并没有什么大的区别,仅仅是多了一个空行,但是在NS中,会自动为空行加上一个节点所以返回值是"undefined",而在IE中将跳过空行仍然指向P标签。<br /><br />更常用的方法:<br />&lt;p id="myParagraph"&gt;This is a sample paragraph.&lt;/p&gt;<br />...<br />alert(document.getElementById("myParagraph").tagName);<br />这种方法你不用关心节点在文档树的哪一个地方,而只要保证在页面中它的ID号是唯一的就可以了。<br /><br />接下来一种访问元素节点的方法是document.getElementsByTagName(),它的返回值是一个数组,例如你可以通过下面的例子改变整个页面的连接：<br />var nodeList = document.getElementsByTagName("A");<br />for (var i = 0; i &lt; nodeList.length; i++)<br />nodeList[i].style.color = "#ff0000";<br /><br />attribute和attributes<br />attribute对象和元素相关,但是却没有被认为是文档树的一部分,因此属性不能作为子节点集合的一部分来使用。<br />有三种方法可以为元素建立新的属性<br />1.<br />var attr = document.createAttribute("myAttribute");<br />attr.value = "myValue";<br />var el = document.getElementById("myParagraph");<br />el.setAttributeNode(attr);<br />2.<br />var el = document.getElementById("myParagraph");<br />el.setAttribute("myAttribute", "myValue");<br />3.<br />var el = document.getElementById("myParagraph");<br />el.myAttribute = "myValue";<br />你可以在html标签种定义自己的属性:<br />&lt;p id="myParagraph" myAttribute="myValue"&gt;This is a sample paragraph.&lt;/p&gt;<br />...<br />alert(document.getElementById("myParagraph").getAttribute("myAttribute"));<br />返回值将是"myValue".但是请注意这里必须使用getAttribute,而不是AttributeName,因为有一些浏览器并不支持自定义属性。<br /><br />attributes也可以被轻易的从一个元素中删除,你可以使用removeAttribute()或者将element.attributeName指向一个null值。<br />通过attributes我们就可以产生一些动态效果：<br />&lt;p id="sample1" align="left"&gt;Text in a paragraph element.&lt;/p&gt;<br />... code for the links ...<br />document.getElementById('sample1').setAttribute('align', 'left');<br />document.getElementById('sample1').setAttribute('align', 'right');<br />另一种:<br />&lt;p id="sample2" style="text-align:left;"&gt;Text in a paragraph<br />element.&lt;/p&gt;<br />... code for the links ...<br />document.getElementById('sample2').style.textAlign = 'left';<br />document.getElementById('sample2').style.textAlign = 'right';<br />跟上面的例子一样,展示了可用通过元素修改style中的属性,甚至是class中的.唯一要提到的是textAlign是从style中的text-align中演变而来的,有一条基本规律,就是style中的属性如果出现-则在dom中将会被去掉并且随后的一个字母将改为大写,还有一点就是如果即使元素中没有style属性,上述例子同样可以使用。<br /><br />text nodes:<br />先看一下例子：<br />&lt;p id="sample1"&gt;This is the initial text.&lt;/p&gt;<br />... code for the links ...<br />document.getElementById('sample1').firstChild.nodeValue =<br />'Once upon a time...';<br />document.getElementById('sample1').firstChild.nodeValue =<br />'...in a galaxy far, far away';<br />首先text nodes并没有像elements那样具有id属性,所有它并不能直接通过document.getElementById()或者document.getElementsByTagName()访问<br />看一下下面的结构也许会更明白一些：<br /><a class="page" href="http://www.98xj1.com/dom/img/nodes2.gif" target="_blank"><img alt="click for full size" src="http://www.98xj1.com/dom/img/nodes2.gif" border="0" /></a><br />可以看出通过document.getElementById('sample1').firstChild.nodeValue就可以读取或者设置text nodes的值了。<br /><br />另一个更加复杂一点的例子：<br />&lt;p id="sample2"&gt;This is the &lt;b&gt;initial&lt;/b&gt; text.&lt;/p&gt;<br />它的文档结构<br /><a class="page" href="http://www.98xj1.com/dom/img/nodes3.gif" target="_blank"><img alt="click for full size" src="http://www.98xj1.com/dom/img/nodes3.gif" border="0" /></a><br />在这里通过document.getElementById('sample1').firstChild.nodeValue讲仅仅改变"This is the"<br />而<b>initial</b> text.将不会改变.在这里大家应该看到了它和innerHTML的不同了.当然你也可以这样用：<br />document.getElementById('sample3').firstChild.nodeValue =<br />'&lt;b&gt;Once&lt;/b&gt; upon a time...';<br />document.getElementById('sample3').firstChild.nodeValue =<br />'...in a galaxy &lt;i&gt;far, far&lt;/i&gt; away';<br />其中的html代码将不会被解释,浏览器将把他们当成普通的文本来显示。<br /><br />创建和删除text nodes:<br />var myTextNode = document.createTextNode("my text");<br />通过上面的代码你可以创建一个新的text node,但是它并不是文档树的一部分,要让它显示在页面上就必须让它成为文档树中某一个节点的child,因为<br />text nodes不能有儿子,所以你不能将它加入到一个text nodes中,attribute也不属于文档树的一部分,这条路也不行,现在只剩下elements nodes<br />了,以下的例子展示了如何添加和删除一个text node：<br />&lt;p id="sample1"&gt;Initial text within a paragraph element.&lt;/p&gt;<br />... code to add a text node ...<br />var text = document.createTextNode(" new text " + (++counter1));<br />var el = document.getElementById("sample1");<br />el.appendChild(text);<br />... code to remove the last child node ...<br />var el = document.getElementById("sample1");<br />if (el.hasChildNodes())<br />el.removeChild(el.lastChild);<br />增加文本是很容易的,上面的代码建立了一个新的text node并且通过appendChild()方法将其加入到childNodes数组的末尾,并设置了一个counter1的全局变量,利于观察<br />hasChildNodes()的返回值是true or false;用来判断当前节点是否还有child,以阻止当其没有child的时候调用removeChild()产生的错误。<br /><br />创建element nodes<br />有了上面的基础,应该更容易理解了,先看一下下面的代码<br />&lt;div id="sample1"&gt;This text is in a DIV element.&lt;/div&gt;<br />... code for the link ...<br />var paraEl, boldEl;<br />paraEl = document.createElement("p");<br />boldEl = document.createElement("b");<br />paraEl.appendChild(document.createTextNode("This is a new paragraph with "));<br />boldEl.appendChild(document.createTextNode("bold"));<br />paraEl.appendChild(boldEl);<br />paraEl.appendChild(document.createTextNode(" text added to the DIV"));<br />document.getElementById("sample1").appendChild(paraEl);<br />你还可以直接为新加的element nodes设置attribute,以下两种都可以:<br />boldEl.style.color = "#ffff00";<br />paraEl.appendChild(boldEl);<br />或者:<br />paraEl.appendChild(boldEl);<br />boldEl.style.color = "#ffff00";<br /><img src ="http://www.blogjava.net/vso/aggbug/95585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vso/" target="_blank">vso</a> 2007-01-23 17:48 <a href="http://www.blogjava.net/vso/articles/95585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>