﻿<?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-漂泊的云</title><link>http://www.blogjava.net/wangxuefeng/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 07:00:40 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 07:00:40 GMT</pubDate><ttl>60</ttl><item><title>DOM的基本方法</title><link>http://www.blogjava.net/wangxuefeng/archive/2009/04/30/268384.html</link><dc:creator>王雪峰</dc:creator><author>王雪峰</author><pubDate>Thu, 30 Apr 2009 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/wangxuefeng/archive/2009/04/30/268384.html</guid><wfw:comment>http://www.blogjava.net/wangxuefeng/comments/268384.html</wfw:comment><comments>http://www.blogjava.net/wangxuefeng/archive/2009/04/30/268384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxuefeng/comments/commentRss/268384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxuefeng/services/trackbacks/268384.html</trackback:ping><description><![CDATA[<p>一.直接引用结点</p>
<p>1.document.getElementById(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --在文档里面通过id来找结点</p>
<p>2.document.getElementByTagName(tagName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回一个数组，包含对这些结点的引用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --如：document.getElementByTagName("span");将返回所有类型为span的结点</p>
<p>二.间接引用结点</p>
<p>3.element.childNodes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回element的所有子结点,可以用element.childNodes[i]的方式来调用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --element.firstChild=element.childNodes[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --element.lastChild=element.childNodes[element.childNonts.length-1];</p>
<p>4.element.parentNode<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --引用父结点</p>
<p>5.element.nextSibling;&nbsp;&nbsp; //引用下一个兄弟结点<br />
&nbsp;&nbsp; element.previousSibling;&nbsp; //引用上一个兄弟结点</p>
<p>三.获得结点信息</p>
<p>6.nodeName属性获得结点名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --对于元素结点返回的是标记名称,如：&lt;a herf&gt;&lt;a&gt;返回的是"a"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --对于属性结点返回的是属性名称,如：class="test" 返回的是test<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --对于文本结点返回的是文本的内容</p>
<p>7.nodeType返回结点的类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --元素结点返回1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --属性结点返回2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --文本结点返回3</p>
<p>8.nodeValue返回结点的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --元素结点返回null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --属性结点返回undefined<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --文本结点返回文本内容</p>
<p>9.hasChildNodes()判断是否有子结点</p>
<p>10.tagName属性返回元素的标记名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --这个属性只有元素结点才有，等同于元素结点的nodeName属性</p>
<p>四.处理属性结点</p>
<p>11.每个属性结点都是元素结点的一个属性，可以通过(元素结点.属性名称)访问</p>
<p>12.利用setAttribute()方法给元素结点添加属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --elementNode.setAttribute(attributeName,attributeValue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --attributeName为属性的名称，attributeValue为属性的值</p>
<p>13.使用getAttribute()方法获得属性值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --elementNode.getAttribute(attributeName);</p>
<p>五.处理文本结点</p>
<p>14.innerHTML和innerText属性，这两个方法相信大家都很熟悉,不介绍了,值得注意的是无论是ie还是firefox都容易把空格、换行、制表符等当成文本结点。所有一般通过element.childNodes[i]引用文本结点的时候，一般要处理：</p>
<p>程序代码 程序代码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script language"javaScript" type="text/javascript"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function cleanWhitespace(element)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0; i&lt;element.childNotes.length; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var node = element.childNodes[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(node.nodeType == 3 &amp;&amp; !/\S/.test(node.nodeValue))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node.parentNode.removeChild(node);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
<p><br />
六.改变文档的层次结构</p>
<p>15.document.createElement()方法创建元素结点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --如：document.createElement("Span");</p>
<p>16.document.createTextNode()方法创建文本结点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --如：document.createTextNode(" "); //注:他不会通过html编码，也就是说这里创建的不是空格，而是字符串 </p>
<p>17.使用appendChild()方法添加结点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --parentElement.appendChild(childElement);</p>
<p>18.使用insertBefore()方法插入子节点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --parentNode.insertBefore(newNode,referenceNode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --newNode为插入的节点，referenceNode为将插入的节点插入到这之前</p>
<p>19.使用replaceChild方法取代子结点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --parentNode.replaceChild(newNode,oldNode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --注：oldNode必须是parentNode的子结点,</p>
<p>20.使用cloneNode方法复制结点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --node.cloneNode(includeChildren);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --includeChildren为bool，表示是否复制其子结点</p>
<p>21.使用removeChild方法删除子结点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --parentNode.removeChild(childNode);</p>
<p>七.表格的操作 --注：ie中无法直接将一个完整的表格结点插入到文档中</p>
<p>22.添加行和单元格<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _table=document.createElement("table");&nbsp;&nbsp; //创建表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.insertRow(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在table的第i行插入行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row.insertCell(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在row的第i个位置插入单元格</p>
<p>23.引用单元格对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --table.rows[i].cells[i];</p>
<p>24.删除行和单元格<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --table.deleteRow(index);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --row.deleteCell(index);</p>
<p>25.交换两行获得两个单元格的位置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node1.swapNode(node2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --这个方法在firefox中将出错</p>
<p>程序代码 程序代码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通用方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function swapNode(node1,node2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _parent=node1.parentNode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _t1=node1.nextSubling;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _t2=node2.nextSubling;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(_t1)parent.insertBefore(node2,_t1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else _parent.appendChild(node2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(_t2)parent.insertBefore(node1,_t2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else _parent.appendChild(node1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br />
程序代码 程序代码</p>
<p>删除所有空白结点：<br />
&lt;script language"javaScript" type="text/javascript"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function cleanWhitespace(element)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0; i&lt;element.childNotes.length; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var node = element.childNodes[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(node.nodeType == 3 &amp;&amp; !/\S/.test(node.nodeValue))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node.parentNode.removeChild(node);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
<p><br />
nodetype=3结点类型是文本\s匹配所有空白</p>
<p>程序代码 程序代码</p>
<p>将结点插入指定索引位置<br />
function insertAt(parentNode,newNode,index)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!parentNode.hasChildNodes())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentNode.appendChild(newNode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return newNode;<br />
}</p>
<p><br />
程序代码 程序代码</p>
<p>//使用try捕获索引不存在出现的异常<br />
try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentNode.insertBefore(newNode,parentNode.childNodes[index]);<br />
}<br />
catch(e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
}<br />
return newNode;</p>
<img src ="http://www.blogjava.net/wangxuefeng/aggbug/268384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxuefeng/" target="_blank">王雪峰</a> 2009-04-30 15:53 <a href="http://www.blogjava.net/wangxuefeng/archive/2009/04/30/268384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>