No pains, No gain
走过、路过、千万别错过
BlogJava
首页
新随笔
新文章
联系
聚合
管理
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
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2007年2月 (1)
2007年1月 (4)
2006年12月 (3)
2006年11月 (1)
2006年10月 (7)
2006年9月 (7)
文章档案
2006年10月 (1)
2006年9月 (1)
常去的站点
董路blog
搜索
最新评论
1. re: 页面直接打印的代码
你好,我试过了,好像不行哦。完全没有反映
--annonce fond de commerce
阅读排行榜
1. javascript 增加一行 ,并且背景要一致(1805)
2. 页面直接打印的代码(895)
3. ajax缓存解决(570)
4. ABOUT: Jasperreports&IReport(488)
5. 区别:String类与string变量、堆与栈(转) (452)
评论排行榜
1. 页面直接打印的代码(1)
2. Html(0)
3. css 不动表头,滚动内容(0)
4. javascript的trim()函数的实现(0)
5. Oracle时间日期操作 (0)
JavaScript高级应用:使用DOM技术操纵文档[转摘]
aaa
在前端展现越来越丰富的今天,DOM对象可以说变得非常重要(其实一直都重要),下面转摘一篇写的不错的文档,供大家以后查阅:
使用data、nodeValue和src属性 DOM 提供了2个属性用于修改文本节点的内容,它们是data和nodeVaule。2个属性实现的功能相同,语法是:object.data="new value"或者object.nodeVaule="new value",其中object代表页面中的文本项节点。如果修改图形文件的内容,语法是:object.src="new value",其中object表示页面中的img标记节点。来看看下面的例子:
<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( "页面初始状态" + "\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( "对页面内容进行修改后" + "\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>
上述代码首先显示页面的初始内容以及节点p1Node的相关属性值,然后对节点bodyNode的第1个孩子节点的nodeValue属性进行赋值修改其文本内容,对节点p3Node的第2个孩子节点(也就是了img标记)的src属性进行赋值修改图形的内容。 使用createElement方法 createElement 方法的功能是在文档中创建一个孤立HTML标记节点。孤立节点既没有孩子节点也没有双亲节点,而且与文档中的现存节点也互不关联。被创建的孤立HTML标记节点的唯一信息就是它代表的HTML标记,比如< P>、< FONT>和< TABLE>。CreateElement的语法为document.createElement(HTMLTag),HTMLTag表示要创建的 HTML标记,返回值是创建的孤立HTML标记节点。来看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("页面初始状态"); tableObj = document.createElement("TABLE"); tbodyObj = document.createElement("TBODY"); trObj = document.createElement("TR"); tdObj = document.createElement("TD"); alert( "对页面内容进行修改后" + "\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>
上述代码在文档中创建了4个孤立HTML标记节点tableObj、tbodyObj、trObj和tdObj,它们就象太空中4颗人造卫星一样,彼此间以及和文档中的现有节点间都互不关联。创建孤立节点的目的不是为了让它真正孤立,随后我们会介绍如何将创建的孤立节点彼此相连,并添加到文档的DOM Tree结构中。 使用cloneNode方法 cloneNode方法的功能是通过克隆(也就是复制)文档中一个现存节点的方式创建文档的一个孤立节点。根据被克隆节点的类型,新创建的孤立节点或者是HTML标记节点,或者是包含字符串信息的文本项节点。 cloneNode的语法为oldNode.createNode(false)或者oldNode.createNode(true),oldNode 表示被克隆的节点,返回值是新创建的节点,false表示仅仅克隆oldNode,true表示克隆oldNode并包含其下属节点。来看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("页面初始状态"); 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( "对页面内容进行修改后" + "\n" + "row1cell2Obj.firstChild = " + row1cell2Obj.firstChild+ "\n" + "row1cell2Obj = " + row1cell2Obj + "\n" + "row3cell2Obj.nodeValue = " + row3cell2Obj.nodeValue + "\n" + "tr3td2Obj.nodeName = " + tr3td2Obj.nodeName + "\n" ); // --> </SCRIPT></BODY></HTML>
上述代码中值得注意的是对文本项节点的处理方式: 1、首先,使用语句row1cell1Obj = document.createTextNode("This is row 1, cell 1")创建单元格(1,1)所在节点; 2、然后使用语句row1cell1Obj.cloneNode(false)分别创建其他单元格节点; 3、最后,使用语句node.nodeValue = string分别为不同单元格赋值。使用appendChild方法 appendChild 方法的功能是在2个节点间建立起父子关系,如果作为父亲的节点已经具有了孩子节点,那么新添加的孩子节点被追加为最后一个孩子,也就是 lastChild。appendChild的语法是fatherObj.appendChild(childObj),返回值是被追加的孩子节点。来看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("页面初始状态"); 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("对页面内容进行修改后"); // --> </SCRIPT></BODY></HTML>
上面的代码演示了一个Table的动态创建过程。首先创建Table的各个行、列以及单元格的节点,然后使用appendChild将这些节点进行连接形成一个Table,最后通过语句bodyNode.appendChild(tableObj)将Table装载进文档中。 使用applyElement方法 applyElement 方法的功能是将一个节点与它的孩子节点和父亲节点脱离,然后将另外一个节点连接到这个节点,最终使它们成为父子关系。applyElement的语法是 childObj.applyElement(fatherObj),返回值是被连接的孩子节点。 我们注意到,applyElement和appendChild实现的目的基本相同,都是在2个节点间建立父子关系,但有2个区别: 1、applyElement方法只能操纵HTML标记节点,不能处理文本项节点。appendNode则能处理2种节点。 2、appendNode对2个节点的连接方式是从父到子,applyElement则是从子到父。 来看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("页面初始状态"); 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("对页面内容进行修改后"); // --> </SCRIPT></BODY></HTML>
上面的代码同样演示了一个Table的动态创建过程。首先创建Table的各个行、列以及单元格的节点,然后混合使用applyElement和 appendChild将这些节点进行连接形成一个Table,最后通过语句bodyNode.appendChild(tableObj)将Table 装载进文档中 使用insertBefore方法 insertBefore方法的功能和 appendChild相似,都是将一个孩子节点连接到一个父亲节点,但insertBefore方法允许我们指定孩子节点的位置。 insertBefore的语法是fatherObj.insertBefore(childObj, brotherObj),返回值是被连接的孩子节点。执行后,childObj的位置在brotherObj之前。来看看下面的例子:
<HTML><HEAD><TITLE> DOM Demo </title></HEAD> <BODY ID="bodyNode"> <SCRIPT LANGUAGE="JavaScript"> <!-- alert("页面初始状态"); 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>
上面的代码又一次演示了一个Table的动态创建过程。首先创建Table的各个行、列以及单元格的节点,然后混合使用insertBefore将这些节点进行连接形成一个Table,最后通过语句bodyNode. insertBefore (tableObj)将Table装载进文档中。可以看到,如果省略掉第2个参数brotherObj采用fatherObj.insertBefore (childObj)方式,那么一定是在要连入的父亲节点还没有孩子节点的情况下,这时,就和appendNode方法的功能完全一样了。 使用removeNode方法 removeNode 方法的功能是删除一个节点,语法为node.removeNode(false)或者node.removeNode(true),返回值是被删除的节点。removeNode(false)表示仅仅删除指定节点,然后这个节点的原孩子节点提升为原双亲节点的孩子节点。removeNode(true)表示删除指定节点及其所有下属节点。被删除的节点成为了孤立节点,不再具有有孩子节点和双亲节点。来看看下面的例子:
<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="页面初始状态" + "\n\n" printChildren(); msg="对页面内容进行修改后" + "\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>
上述代码首先显示页面的初始内容以及bodyNode的每个孩子节点的nodeName属性值,然后仅仅删除p3Node。删除p3Node前, bodyNode有6个孩子节点,p3Node有4个孩子节点。删除p3Node后,节点p3Node的4个孩子节点提升为bodyNode的孩子节点,这样bodyNode就有了9个节点。p3Node被删除后返回值为deletedNode,它的nodeName属性值为P,孩子节点数为0,也就是说,它成为一个孤立节点。 现在我们将上述代码中的deletedNode = p3Node.removeNode(false)修改为deletedNode = p3Node.removeNode(true),你会看到,删除p3Node后,bodyNode的孩子节点数变为5。使用replaceNode方法 replaceNode方法的功能是用新创建的节点替换一个节点及其下属节点,语法为oldNode.replaceNode(newNode),返回值是被替换的节点。来看看下面的例子:
<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="页面初始状态" + "\n\n" printChildren(); msg="对页面内容进行修改后" + "\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>
上述代码首先显示页面的初始内容以及bodyNode的每个孩子节点的nodeName属性值,然后用新创建的文本项节点替换p3Node。替换后, bodyNode的孩子节点数目没有变,原来的P节点替换为文本项节点。变量replaceNode表示被替换的节点p3Node,它仍包含原来的4个孩子节点。 replaceNode方法的另一个功能是删除节点及其下属节点,就象前面介绍的removeNode(true)一样。这时,我们只需将replaceNode方法的参数设置为一个现存的节点就可以。现在,我们将上述代码中的b = document.createTextNode("New Body Page")修改为b = p2Node,你会看到,p3Node及其下属节点被删除了,没有替换节点生成,bodyNode的孩子节点数变为5。 如果replaceNode方法的参数为空,也就是执行replaceNode(),那么将导致浏览器脚本运行错误。 使用swapNode方法 swapNode方法的功能是交换2个节点(包括其下属节点)在文档Tree中的位置,语法为firstNode.swapNode(secondNode),返回值是节点firstNode。来看看下面的例子:
<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="页面初始状态" + "\n\n" printChildren(); msg="对页面内容进行修改后" + "\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>
上述代码首先显示页面的初始内容以及bodyNode的每个孩子节点的nodeName属性值,然后交换p3Node和p2Node的位置。交换后,bodyNode的孩子节点数目没有变,变量swappedNode表示p3Node,它仍包含原来的4个孩子节点。 swapNode 方法的另一个功能是替换节点及其下属节点,就象前面介绍的replaceNode方法一样。这时,我们只需将replaceNode方法的参数设置为一个新创建的节点就可以。现在,我们将上述代码中的b = p2Node修改为b = document.createTextNode("This is a swapped in text"),你会看到,p3Node及其下属节点被新创建的文本项节点所替换,原来的节点类型P变为了文本项节点类型#text。
转摘自http://bbs.javascript.com.cn/simple/index.php?t180.html
posted on 2006-09-21 20:58
一缕青烟
阅读(150)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理