No pains, No gain
走過(guò)、路過(guò)、千萬(wàn)別錯(cuò)過(guò)
BlogJava
首頁(yè)
新隨筆
新文章
聯(lián)系
聚合
管理
posts - 23,comments - 1,trackbacks - 0
<
2006年9月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(1)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆檔案
2007年2月 (1)
2007年1月 (4)
2006年12月 (3)
2006年11月 (1)
2006年10月 (7)
2006年9月 (7)
文章檔案
2006年10月 (1)
2006年9月 (1)
常去的站點(diǎn)
董路blog
搜索
最新評(píng)論
1.?re: 頁(yè)面直接打印的代碼
你好,我試過(guò)了,好像不行哦。完全沒(méi)有反映
--annonce fond de commerce
閱讀排行榜
1.?javascript 增加一行 ,并且背景要一致(1818)
2.?頁(yè)面直接打印的代碼(902)
3.?ajax緩存解決(577)
4.?ABOUT: Jasperreports&IReport(495)
5.? 區(qū)別:String類與string變量、堆與棧(轉(zhuǎn)) (459)
評(píng)論排行榜
1.?頁(yè)面直接打印的代碼(1)
2.?Html(0)
3.?css 不動(dòng)表頭,滾動(dòng)內(nèi)容(0)
4.?javascript的trim()函數(shù)的實(shí)現(xiàn)(0)
5.?Oracle時(shí)間日期操作 (0)
JavaScript高級(jí)應(yīng)用:使用DOM技術(shù)操縱文檔[轉(zhuǎn)摘]
aaa
在前端展現(xiàn)越來(lái)越豐富的今天,DOM對(duì)象可以說(shuō)變得非常重要(其實(shí)一直都重要),下面轉(zhuǎn)摘一篇寫(xiě)的不錯(cuò)的文檔,供大家以后查閱:
使用data、nodeValue和src屬性 DOM 提供了2個(gè)屬性用于修改文本節(jié)點(diǎn)的內(nèi)容,它們是data和nodeVaule。2個(gè)屬性實(shí)現(xiàn)的功能相同,語(yǔ)法是:object.data="new value"或者object.nodeVaule="new value",其中object代表頁(yè)面中的文本項(xiàng)節(jié)點(diǎn)。如果修改圖形文件的內(nèi)容,語(yǔ)法是:object.src="new value",其中object表示頁(yè)面中的img標(biāo)記節(jié)點(diǎn)。來(lái)看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> This is the document body <P ID = "p1Node">This is paragraph 1.</P> <P ID = "p2Node">This is paragraph 2.</P> <P ID = "p3Node">This is paragraph 3. <IMG ID = "imgNode" SRC="myexam.gif">This text follows the image <TABLE ID="tableNode"> <TR><TD BGCOLOR=yellow>This is row 1, cell 1</TD><TD BGCOLOR=orange>This is row 1, cell 2</TD></TR> <TR><TD BGCOLOR=red>This is row 2, cell 1</TD><TD BGCOLOR=magenta>This is row 2, cell 2</TD></TR> <TR><TD BGCOLOR=lightgreen>This is row 3, cell 1</TD><TD BGCOLOR=beige>This is row 3, cell 2</TD></TR> </TABLE> </P> <P ID = "p4Node">This is paragraph 4.</P> <SCRIPT LANGUAGE="JavaScript"> <!-- alert( "頁(yè)面初始狀態(tài)" + "\n\n" + "bodyNode.firstChild.nodeValue = " + bodyNode.firstChild.nodeValue + "\n" + "bodyNode.firstChild.data = " + bodyNode.firstChild.data + "\n" ); bodyNode.firstChild.nodeValue = "This is the new document body, set by the nodeValue property"; p3Node.childNodes[1].src = "myexam2.gif"; alert( "對(duì)頁(yè)面內(nèi)容進(jìn)行修改后" + "\n\n" + "bodyNode.firstChild.nodeValue = " + bodyNode.firstChild.nodeValue + "\n" + "bodyNode.firstChild.data = " + bodyNode.firstChild.data + "\n" + "p3Node.childNodes[1].src = " + p3Node.childNodes[1].src ); // --> </SCRIPT></BODY></HTML>
上述代碼首先顯示頁(yè)面的初始內(nèi)容以及節(jié)點(diǎn)p1Node的相關(guān)屬性值,然后對(duì)節(jié)點(diǎn)bodyNode的第1個(gè)孩子節(jié)點(diǎn)的nodeValue屬性進(jìn)行賦值修改其文本內(nèi)容,對(duì)節(jié)點(diǎn)p3Node的第2個(gè)孩子節(jié)點(diǎn)(也就是了img標(biāo)記)的src屬性進(jìn)行賦值修改圖形的內(nèi)容。 使用createElement方法 createElement 方法的功能是在文檔中創(chuàng)建一個(gè)孤立HTML標(biāo)記節(jié)點(diǎn)。孤立節(jié)點(diǎn)既沒(méi)有孩子節(jié)點(diǎn)也沒(méi)有雙親節(jié)點(diǎn),而且與文檔中的現(xiàn)存節(jié)點(diǎn)也互不關(guān)聯(lián)。被創(chuàng)建的孤立HTML標(biāo)記節(jié)點(diǎn)的唯一信息就是它代表的HTML標(biāo)記,比如< P>、< FONT>和< TABLE>。CreateElement的語(yǔ)法為document.createElement(HTMLTag),HTMLTag表示要?jiǎng)?chuàng)建的 HTML標(biāo)記,返回值是創(chuàng)建的孤立HTML標(biāo)記節(jié)點(diǎn)。來(lái)看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("頁(yè)面初始狀態(tài)"); tableObj = document.createElement("TABLE"); tbodyObj = document.createElement("TBODY"); trObj = document.createElement("TR"); tdObj = document.createElement("TD"); alert( "對(duì)頁(yè)面內(nèi)容進(jìn)行修改后" + "\n" + "bodyNode.firstChild = " + bodyNode.firstChild + "\n" + "tableObj.nodeName = " + tableObj.nodeName + "\n" + "tbodyObj.nodeName = " + tbodyObj.nodeName + "\n" + "trObj.nodeName = " + trObj.nodeName + "\n" + "tdObj.nodeName = " + tdObj.nodeName + "\n" + "tableObj = " + tableObj + "\n" ); // --> </SCRIPT> </BODY> </HTML>
上述代碼在文檔中創(chuàng)建了4個(gè)孤立HTML標(biāo)記節(jié)點(diǎn)tableObj、tbodyObj、trObj和tdObj,它們就象太空中4顆人造衛(wèi)星一樣,彼此間以及和文檔中的現(xiàn)有節(jié)點(diǎn)間都互不關(guān)聯(lián)。創(chuàng)建孤立節(jié)點(diǎn)的目的不是為了讓它真正孤立,隨后我們會(huì)介紹如何將創(chuàng)建的孤立節(jié)點(diǎn)彼此相連,并添加到文檔的DOM Tree結(jié)構(gòu)中。 使用cloneNode方法 cloneNode方法的功能是通過(guò)克隆(也就是復(fù)制)文檔中一個(gè)現(xiàn)存節(jié)點(diǎn)的方式創(chuàng)建文檔的一個(gè)孤立節(jié)點(diǎn)。根據(jù)被克隆節(jié)點(diǎn)的類型,新創(chuàng)建的孤立節(jié)點(diǎn)或者是HTML標(biāo)記節(jié)點(diǎn),或者是包含字符串信息的文本項(xiàng)節(jié)點(diǎn)。 cloneNode的語(yǔ)法為oldNode.createNode(false)或者oldNode.createNode(true),oldNode 表示被克隆的節(jié)點(diǎn),返回值是新創(chuàng)建的節(jié)點(diǎn),false表示僅僅克隆oldNode,true表示克隆oldNode并包含其下屬節(jié)點(diǎn)。來(lái)看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("頁(yè)面初始狀態(tài)"); tableObj = document.createElement("TABLE"); tbodyObj = document.createElement("TBODY"); tr1Obj = document.createElement("TR"); tr2Obj = tr1Obj.cloneNode(false); tr3Obj = tr1Obj.cloneNode(false); tr1td1Obj = document.createElement("TD"); tr1td2Obj = tr1td1Obj.cloneNode(false); tr2td1Obj = tr1td1Obj.cloneNode(false); tr2td2Obj = tr1td1Obj.cloneNode(false); tr3td1Obj = tr1td1Obj.cloneNode(false); tr3td2Obj = tr1td1Obj.cloneNode(false); row1cell1Obj = document.createTextNode("This is row 1, cell 1"); row1cell2Obj = row1cell1Obj.cloneNode(false); row2cell1Obj = row1cell1Obj.cloneNode(false); row2cell2Obj = row1cell1Obj.cloneNode(false); row3cell1Obj = row1cell1Obj.cloneNode(false); row3cell2Obj = row1cell1Obj.cloneNode(false); row1cell2Obj.nodeValue = "This is row 1, cell 2"; row2cell1Obj.nodeValue = "This is row 2, cell 1"; row2cell2Obj.nodeValue = "This is row 2, cell 2"; row3cell1Obj.nodeValue = "This is row 3, cell 1"; row3cell2Obj.nodeValue = "This is row 3, cell 2"; alert( "對(duì)頁(yè)面內(nèi)容進(jìn)行修改后" + "\n" + "row1cell2Obj.firstChild = " + row1cell2Obj.firstChild+ "\n" + "row1cell2Obj = " + row1cell2Obj + "\n" + "row3cell2Obj.nodeValue = " + row3cell2Obj.nodeValue + "\n" + "tr3td2Obj.nodeName = " + tr3td2Obj.nodeName + "\n" ); // --> </SCRIPT></BODY></HTML>
上述代碼中值得注意的是對(duì)文本項(xiàng)節(jié)點(diǎn)的處理方式: 1、首先,使用語(yǔ)句row1cell1Obj = document.createTextNode("This is row 1, cell 1")創(chuàng)建單元格(1,1)所在節(jié)點(diǎn); 2、然后使用語(yǔ)句row1cell1Obj.cloneNode(false)分別創(chuàng)建其他單元格節(jié)點(diǎn); 3、最后,使用語(yǔ)句node.nodeValue = string分別為不同單元格賦值。使用appendChild方法 appendChild 方法的功能是在2個(gè)節(jié)點(diǎn)間建立起父子關(guān)系,如果作為父親的節(jié)點(diǎn)已經(jīng)具有了孩子節(jié)點(diǎn),那么新添加的孩子節(jié)點(diǎn)被追加為最后一個(gè)孩子,也就是 lastChild。appendChild的語(yǔ)法是fatherObj.appendChild(childObj),返回值是被追加的孩子節(jié)點(diǎn)。來(lái)看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("頁(yè)面初始狀態(tài)"); tableObj = document.createElement("TABLE"); tbodyObj = document.createElement("TBODY"); tr1Obj = document.createElement("TR"); tr2Obj = tr1Obj.cloneNode(); tr3Obj = tr1Obj.cloneNode(); tr1td1Obj = document.createElement("TD"); tr1td2Obj = tr1td1Obj.cloneNode(); tr2td1Obj = tr1td1Obj.cloneNode(); tr2td2Obj = tr1td1Obj.cloneNode(); tr3td1Obj = tr1td1Obj.cloneNode(); tr3td2Obj = tr1td1Obj.cloneNode(); row1cell1Obj = document.createTextNode("This is row 1, cell 1"); row1cell2Obj = row1cell1Obj.cloneNode(); row2cell1Obj = row1cell1Obj.cloneNode(); row2cell2Obj = row1cell1Obj.cloneNode(); row3cell1Obj = row1cell1Obj.cloneNode(); row3cell2Obj = row1cell1Obj.cloneNode(); row1cell2Obj.nodeValue = "This is row 1, cell 2"; row2cell1Obj.nodeValue = "This is row 2, cell 1"; row2cell2Obj.nodeValue = "This is row 2, cell 2"; row3cell1Obj.nodeValue = "This is row 3, cell 1"; row3cell2Obj.nodeValue = "This is row 3, cell 2"; returnValue = tableObj.appendChild(tbodyObj); tbodyObj.appendChild(tr1Obj); tbodyObj.appendChild(tr2Obj); tbodyObj.appendChild(tr3Obj); tr1Obj.appendChild(tr1td1Obj); tr1Obj.appendChild(tr1td2Obj); tr2Obj.appendChild(tr2td1Obj); tr2Obj.appendChild(tr2td2Obj); tr3Obj.appendChild(tr3td1Obj); tr3Obj.appendChild(tr3td2Obj); tr1td1Obj.appendChild(row1cell1Obj); tr1td2Obj.appendChild(row1cell2Obj); tr2td1Obj.appendChild(row2cell1Obj); tr2td2Obj.appendChild(row2cell2Obj); tr3td1Obj.appendChild(row3cell1Obj); tr3td2Obj.appendChild(row3cell2Obj); bodyNode.appendChild(tableObj); alert("對(duì)頁(yè)面內(nèi)容進(jìn)行修改后"); // --> </SCRIPT></BODY></HTML>
上面的代碼演示了一個(gè)Table的動(dòng)態(tài)創(chuàng)建過(guò)程。首先創(chuàng)建Table的各個(gè)行、列以及單元格的節(jié)點(diǎn),然后使用appendChild將這些節(jié)點(diǎn)進(jìn)行連接形成一個(gè)Table,最后通過(guò)語(yǔ)句bodyNode.appendChild(tableObj)將Table裝載進(jìn)文檔中。 使用applyElement方法 applyElement 方法的功能是將一個(gè)節(jié)點(diǎn)與它的孩子節(jié)點(diǎn)和父親節(jié)點(diǎn)脫離,然后將另外一個(gè)節(jié)點(diǎn)連接到這個(gè)節(jié)點(diǎn),最終使它們成為父子關(guān)系。applyElement的語(yǔ)法是 childObj.applyElement(fatherObj),返回值是被連接的孩子節(jié)點(diǎn)。 我們注意到,applyElement和appendChild實(shí)現(xiàn)的目的基本相同,都是在2個(gè)節(jié)點(diǎn)間建立父子關(guān)系,但有2個(gè)區(qū)別: 1、applyElement方法只能操縱HTML標(biāo)記節(jié)點(diǎn),不能處理文本項(xiàng)節(jié)點(diǎn)。appendNode則能處理2種節(jié)點(diǎn)。 2、appendNode對(duì)2個(gè)節(jié)點(diǎn)的連接方式是從父到子,applyElement則是從子到父。 來(lái)看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("頁(yè)面初始狀態(tài)"); tableObj = document.createElement("TABLE"); tbodyObj = document.createElement("TBODY"); tr1Obj = document.createElement("TR"); tr2Obj = tr1Obj.cloneNode(); tr3Obj = tr1Obj.cloneNode(); tr1td1Obj = document.createElement("TD"); tr1td2Obj = tr1td1Obj.cloneNode(); tr2td1Obj = tr1td1Obj.cloneNode(); tr2td2Obj = tr1td1Obj.cloneNode(); tr3td1Obj = tr1td1Obj.cloneNode(); tr3td2Obj = tr1td1Obj.cloneNode(); row1cell1Obj = document.createTextNode("This is row 1, cell 1"); row1cell2Obj = row1cell1Obj.cloneNode(); row2cell1Obj = row1cell1Obj.cloneNode(); row2cell2Obj = row1cell1Obj.cloneNode(); row3cell1Obj = row1cell1Obj.cloneNode(); row3cell2Obj = row1cell1Obj.cloneNode(); row1cell2Obj.nodeValue = "This is row 1, cell 2"; row2cell1Obj.nodeValue = "This is row 2, cell 1"; row2cell2Obj.nodeValue = "This is row 2, cell 2"; row3cell1Obj.nodeValue = "This is row 3, cell 1"; row3cell2Obj.nodeValue = "This is row 3, cell 2"; tr1td1Obj.appendChild(row1cell1Obj); tr1td2Obj.appendChild(row1cell2Obj); tr2td1Obj.appendChild(row2cell1Obj); tr2td2Obj.appendChild(row2cell2Obj); tr3td1Obj.appendChild(row3cell1Obj); tr3td2Obj.appendChild(row3cell2Obj); tr1td1Obj.applyElement(tr1Obj); tr1Obj.appendChild(tr1td2Obj); tr2td1Obj.applyElement(tr2Obj); tr2Obj.appendChild(tr2td2Obj); tr3td1Obj.applyElement(tr3Obj); tr3Obj.appendChild(tr3td2Obj); tr1Obj.applyElement(tbodyObj); tbodyObj.appendChild(tr2Obj); tbodyObj.appendChild(tr3Obj); returnValue = tbodyObj.applyElement(tableObj); bodyNode.appendChild(tableObj); alert("對(duì)頁(yè)面內(nèi)容進(jìn)行修改后"); // --> </SCRIPT></BODY></HTML>
上面的代碼同樣演示了一個(gè)Table的動(dòng)態(tài)創(chuàng)建過(guò)程。首先創(chuàng)建Table的各個(gè)行、列以及單元格的節(jié)點(diǎn),然后混合使用applyElement和 appendChild將這些節(jié)點(diǎn)進(jìn)行連接形成一個(gè)Table,最后通過(guò)語(yǔ)句bodyNode.appendChild(tableObj)將Table 裝載進(jìn)文檔中 使用insertBefore方法 insertBefore方法的功能和 appendChild相似,都是將一個(gè)孩子節(jié)點(diǎn)連接到一個(gè)父親節(jié)點(diǎn),但insertBefore方法允許我們指定孩子節(jié)點(diǎn)的位置。 insertBefore的語(yǔ)法是fatherObj.insertBefore(childObj, brotherObj),返回值是被連接的孩子節(jié)點(diǎn)。執(zhí)行后,childObj的位置在brotherObj之前。來(lái)看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("頁(yè)面初始狀態(tài)"); tableObj = document.createElement("TABLE"); tbodyObj = document.createElement("TBODY"); tr1Obj = document.createElement("TR"); tr2Obj = tr1Obj.cloneNode(); tr3Obj = tr1Obj.cloneNode(); tr1td1Obj = document.createElement("TD"); tr1td2Obj = tr1td1Obj.cloneNode(); tr2td1Obj = tr1td1Obj.cloneNode(); tr2td2Obj = tr1td1Obj.cloneNode(); tr3td1Obj = tr1td1Obj.cloneNode(); tr3td2Obj = tr1td1Obj.cloneNode(); row1cell1Obj = document.createTextNode("This is row 1, cell 1"); row1cell2Obj = row1cell1Obj.cloneNode(); row2cell1Obj = row1cell1Obj.cloneNode(); row2cell2Obj = row1cell1Obj.cloneNode(); row3cell1Obj = row1cell1Obj.cloneNode(); row3cell2Obj = row1cell1Obj.cloneNode(); row1cell2Obj.nodeValue = "This is row 1, cell 2"; row2cell1Obj.nodeValue = "This is row 2, cell 1"; row2cell2Obj.nodeValue = "This is row 2, cell 2"; row3cell1Obj.nodeValue = "This is row 3, cell 1"; row3cell2Obj.nodeValue = "This is row 3, cell 2"; returnValue = tableObj.insertBefore(tbodyObj); tbodyObj.insertBefore(tr3Obj); tbodyObj.insertBefore(tr2Obj, tr3Obj); tbodyObj.insertBefore(tr1Obj, tr2Obj); tr1Obj.insertBefore(tr1td2Obj); tr1Obj.insertBefore(tr1td1Obj, tr1td2Obj); tr2Obj.insertBefore(tr2td2Obj); tr2Obj.insertBefore(tr2td1Obj, tr2td2Obj); tr3Obj.insertBefore(tr3td2Obj); tr3Obj.insertBefore(tr3td1Obj, tr3td2Obj); tr1td2Obj.insertBefore(row1cell2Obj); tr1td1Obj.insertBefore(row1cell1Obj); tr2td2Obj.insertBefore(row2cell2Obj); tr2td1Obj.insertBefore(row2cell1Obj); tr3td2Obj.insertBefore(row3cell2Obj); tr3td1Obj.insertBefore(row3cell1Obj); bodyNode.insertBefore(tableObj); // --> </SCRIPT></BODY></HTML>
上面的代碼又一次演示了一個(gè)Table的動(dòng)態(tài)創(chuàng)建過(guò)程。首先創(chuàng)建Table的各個(gè)行、列以及單元格的節(jié)點(diǎn),然后混合使用insertBefore將這些節(jié)點(diǎn)進(jìn)行連接形成一個(gè)Table,最后通過(guò)語(yǔ)句bodyNode. insertBefore (tableObj)將Table裝載進(jìn)文檔中。可以看到,如果省略掉第2個(gè)參數(shù)brotherObj采用fatherObj.insertBefore (childObj)方式,那么一定是在要連入的父親節(jié)點(diǎn)還沒(méi)有孩子節(jié)點(diǎn)的情況下,這時(shí),就和appendNode方法的功能完全一樣了。 使用removeNode方法 removeNode 方法的功能是刪除一個(gè)節(jié)點(diǎn),語(yǔ)法為node.removeNode(false)或者node.removeNode(true),返回值是被刪除的節(jié)點(diǎn)。removeNode(false)表示僅僅刪除指定節(jié)點(diǎn),然后這個(gè)節(jié)點(diǎn)的原孩子節(jié)點(diǎn)提升為原雙親節(jié)點(diǎn)的孩子節(jié)點(diǎn)。removeNode(true)表示刪除指定節(jié)點(diǎn)及其所有下屬節(jié)點(diǎn)。被刪除的節(jié)點(diǎn)成為了孤立節(jié)點(diǎn),不再具有有孩子節(jié)點(diǎn)和雙親節(jié)點(diǎn)。來(lái)看看下面的例子:
<HTML><HEAD><TITLE>DOM Demo</TITLE></HEAD> <BODY id=bodyNode>This is the document body <P id=p1Node>This is paragraph 1.</P> <P id=p2Node>This is paragraph 2.</P> <P id=p3Node>This is paragraph 3. <IMG id=imgNode src="myexam.gif">This text follows the image <TABLE id=tableNode> <TBODY> <TR> <TD bgColor=yellow>This is row 1, cell 1</TD> <TD bgColor=orange>This is row 1, cell 2</TD></TR> <TR> <TD bgColor=red>This is row 2, cell 1</TD> <TD bgColor=magenta>This is row 2, cell 2</TD></TR> <TR> <TD bgColor=lightgreen>This is row 3, cell 1</TD> <TD bgColor=beige>This is row 3, cell 2</TD></TR></TBODY></TABLE></P> <P id=p4Node>This is paragraph 4.</P> <SCRIPT language=JavaScript> <!-- var msg = ""; function printChildren() { childCount = bodyNode.childNodes.length; msg += "bodyNode.childNodes.length = " + bodyNode.childNodes.length + "\n" ; for(var i = 0; i < childCount; i++) { msg += "bodyNode.childNodes.nodeName = " + bodyNode.childNodes.nodeName + "\n"; } alert(msg); } msg="頁(yè)面初始狀態(tài)" + "\n\n" printChildren(); msg="對(duì)頁(yè)面內(nèi)容進(jìn)行修改后" + "\n\n" msg += "Deleting Paragraph 3\n"; var deletedNode = p3Node.removeNode(false); msg += "deletedNode.nodeName = " + deletedNode.nodeName + "\n"; msg += "deletedNode.childNodes.length = " + deletedNode.childNodes.length + "\n"; printChildren(); // --> </SCRIPT></BODY></HTML>
上述代碼首先顯示頁(yè)面的初始內(nèi)容以及bodyNode的每個(gè)孩子節(jié)點(diǎn)的nodeName屬性值,然后僅僅刪除p3Node。刪除p3Node前, bodyNode有6個(gè)孩子節(jié)點(diǎn),p3Node有4個(gè)孩子節(jié)點(diǎn)。刪除p3Node后,節(jié)點(diǎn)p3Node的4個(gè)孩子節(jié)點(diǎn)提升為bodyNode的孩子節(jié)點(diǎn),這樣bodyNode就有了9個(gè)節(jié)點(diǎn)。p3Node被刪除后返回值為deletedNode,它的nodeName屬性值為P,孩子節(jié)點(diǎn)數(shù)為0,也就是說(shuō),它成為一個(gè)孤立節(jié)點(diǎn)。 現(xiàn)在我們將上述代碼中的deletedNode = p3Node.removeNode(false)修改為deletedNode = p3Node.removeNode(true),你會(huì)看到,刪除p3Node后,bodyNode的孩子節(jié)點(diǎn)數(shù)變?yōu)?。使用replaceNode方法 replaceNode方法的功能是用新創(chuàng)建的節(jié)點(diǎn)替換一個(gè)節(jié)點(diǎn)及其下屬節(jié)點(diǎn),語(yǔ)法為oldNode.replaceNode(newNode),返回值是被替換的節(jié)點(diǎn)。來(lái)看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> This is the document body <P ID = "p1Node">This is paragraph 1.</P> <P ID = "p2Node">This is paragraph 2.</P> <P ID = "p3Node">This is paragraph 3. <IMG ID = "imgNode" SRC="myexam.gif">This text follows the image <TABLE ID="tableNode"> <TR><TD BGCOLOR=yellow>This is row 1, cell 1</TD><TD BGCOLOR=orange>This is row 1, cell 2</TD></TR> <TR><TD BGCOLOR=red>This is row 2, cell 1</TD><TD BGCOLOR=magenta>This is row 2, cell 2</TD></TR> <TR><TD BGCOLOR=lightgreen>This is row 3, cell 1</TD><TD BGCOLOR=beige>This is row 3, cell 2</TD></TR> </TABLE> </P> <P ID = "p4Node">This is paragraph 4.</P> <SCRIPT LANGUAGE="JavaScript"> <!-- var msg = ""; function printChildren() { childCount = bodyNode.childNodes.length; msg += "bodyNode.childNodes.length = " + bodyNode.childNodes.length + "\n" ; for(var i = 0; i < childCount; i++) { msg += "bodyNode.childNodes.nodeName = " + bodyNode.childNodes.nodeName + "\n"; } alert(msg); } msg="頁(yè)面初始狀態(tài)" + "\n\n" printChildren(); msg="對(duì)頁(yè)面內(nèi)容進(jìn)行修改后" + "\n\n" msg += "Replacing Paragraph 3\n"; var b = document.createTextNode("New Body Page"); var replacedNode = p3Node.replaceNode(b); msg += "replacedNode.nodeName = " + replacedNode.nodeName + "\n"; msg += "replacedNode.childNodes.length = " + replacedNode.childNodes.length + "\n"; msg += "p2Node.nodeName = " + p2Node.nodeName + "\n"; printChildren(); // --> </SCRIPT></BODY></HTML>
上述代碼首先顯示頁(yè)面的初始內(nèi)容以及bodyNode的每個(gè)孩子節(jié)點(diǎn)的nodeName屬性值,然后用新創(chuàng)建的文本項(xiàng)節(jié)點(diǎn)替換p3Node。替換后, bodyNode的孩子節(jié)點(diǎn)數(shù)目沒(méi)有變,原來(lái)的P節(jié)點(diǎn)替換為文本項(xiàng)節(jié)點(diǎn)。變量replaceNode表示被替換的節(jié)點(diǎn)p3Node,它仍包含原來(lái)的4個(gè)孩子節(jié)點(diǎn)。 replaceNode方法的另一個(gè)功能是刪除節(jié)點(diǎn)及其下屬節(jié)點(diǎn),就象前面介紹的removeNode(true)一樣。這時(shí),我們只需將replaceNode方法的參數(shù)設(shè)置為一個(gè)現(xiàn)存的節(jié)點(diǎn)就可以。現(xiàn)在,我們將上述代碼中的b = document.createTextNode("New Body Page")修改為b = p2Node,你會(huì)看到,p3Node及其下屬節(jié)點(diǎn)被刪除了,沒(méi)有替換節(jié)點(diǎn)生成,bodyNode的孩子節(jié)點(diǎn)數(shù)變?yōu)?。 如果replaceNode方法的參數(shù)為空,也就是執(zhí)行replaceNode(),那么將導(dǎo)致瀏覽器腳本運(yùn)行錯(cuò)誤。 使用swapNode方法 swapNode方法的功能是交換2個(gè)節(jié)點(diǎn)(包括其下屬節(jié)點(diǎn))在文檔Tree中的位置,語(yǔ)法為firstNode.swapNode(secondNode),返回值是節(jié)點(diǎn)firstNode。來(lái)看看下面的例子:
<HTML><HEAD><TITLE>DOM Demo</TITLE></HEAD> <BODY id=bodyNode>This is the document body <P id=p1Node>This is paragraph 1.</P> <P id=p2Node>This is paragraph 2.</P> <P id=p3Node>This is paragraph 3. <IMG id=imgNode src="myexam.gif">This text follows the image <TABLE id=tableNode> <TBODY> <TR> <TD bgColor=yellow>This is row 1, cell 1</TD> <TD bgColor=orange>This is row 1, cell 2</TD></TR> <TR> <TD bgColor=red>This is row 2, cell 1</TD> <TD bgColor=magenta>This is row 2, cell 2</TD></TR> <TR> <TD bgColor=lightgreen>This is row 3, cell 1</TD> <TD bgColor=beige>This is row 3, cell 2</TD></TR></TBODY></TABLE></P> <P id=p4Node>This is paragraph 4.</P> <SCRIPT language=JavaScript> <!-- var msg = ""; function printChildren() { childCount = bodyNode.childNodes.length; msg += "bodyNode.childNodes.length = " + bodyNode.childNodes.length + "\n" ; for(var i = 0; i < childCount; i++) { msg += "bodyNode.childNodes.nodeName = " + bodyNode.childNodes.nodeName + "\n"; } alert(msg); } msg="頁(yè)面初始狀態(tài)" + "\n\n" printChildren(); msg="對(duì)頁(yè)面內(nèi)容進(jìn)行修改后" + "\n\n" msg += "Swapping Paragraph 3 with Paragraph 2\n"; var b = p2Node; var swappedNode = p3Node.swapNode(b); msg += "swappedNode.nodeName = " + swappedNode.nodeName + "\n"; msg += "swappedNode.childNodes.length = " + swappedNode.childNodes.length + "\n"; msg += "p2Node.nodeName = " + p2Node.nodeName + "\n"; printChildren(); // --> </SCRIPT></BODY></HTML>
上述代碼首先顯示頁(yè)面的初始內(nèi)容以及bodyNode的每個(gè)孩子節(jié)點(diǎn)的nodeName屬性值,然后交換p3Node和p2Node的位置。交換后,bodyNode的孩子節(jié)點(diǎn)數(shù)目沒(méi)有變,變量swappedNode表示p3Node,它仍包含原來(lái)的4個(gè)孩子節(jié)點(diǎn)。 swapNode 方法的另一個(gè)功能是替換節(jié)點(diǎn)及其下屬節(jié)點(diǎn),就象前面介紹的replaceNode方法一樣。這時(shí),我們只需將replaceNode方法的參數(shù)設(shè)置為一個(gè)新創(chuàng)建的節(jié)點(diǎn)就可以。現(xiàn)在,我們將上述代碼中的b = p2Node修改為b = document.createTextNode("This is a swapped in text"),你會(huì)看到,p3Node及其下屬節(jié)點(diǎn)被新創(chuàng)建的文本項(xiàng)節(jié)點(diǎn)所替換,原來(lái)的節(jié)點(diǎn)類型P變?yōu)榱宋谋卷?xiàng)節(jié)點(diǎn)類型#text。
轉(zhuǎn)摘自http://bbs.javascript.com.cn/simple/index.php?t180.html
posted on 2006-09-21 20:58
一縷青煙
閱讀(151)
評(píng)論(0)
編輯
收藏
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
Copyright ©2025 一縷青煙 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
日韩亚洲国产高清免费视频
|
日本免费一区二区久久人人澡
|
精品国产日韩亚洲一区91
|
久久亚洲AV成人无码软件
|
区久久AAA片69亚洲
|
国产成人精品高清免费
|
精品国产污污免费网站aⅴ
|
免费在线观影网站
|
一级毛片a女人刺激视频免费
|
亚洲熟妇AV一区二区三区浪潮
|
亚洲成人精品久久
|
亚洲老妈激情一区二区三区
|
亚洲国产精品综合久久网络
|
成人免费视频一区
|
亚色九九九全国免费视频
|
91热久久免费精品99
|
精品免费视在线观看
|
a级毛片毛片免费观看久潮
|
国产成人无码区免费A∨视频网站
|
18禁网站免费无遮挡无码中文
|
久久香蕉国产线看免费
|
在线看片免费人成视频久网下载
|
精品久久洲久久久久护士免费
|
91在线视频免费看
|
在线观看日本免费a∨视频
|
久热中文字幕在线精品免费
|
亚洲人成免费网站
|
国产91免费视频
|
69av免费视频
|
毛片a级毛片免费播放100
|
成人午夜免费福利
|
日本免费网站在线观看
|
国产伦一区二区三区免费
|
四虎永久在线精品免费观看地址
|
日韩在线a视频免费播放
|
四虎影视免费永久在线观看
|
免费人成无码大片在线观看
|
亚洲精品综合久久
|
亚洲精品无码不卡在线播放HE
|
亚洲va无码va在线va天堂
|
综合自拍亚洲综合图不卡区
|