JavaScript DOM学习笔记5——创建和操作节点

之前学习了DOM中各种节点的访问方法,DOM所包含的内容远不止如此,DOM编程还包括当DOM树已经构建起来之后再添加节点。

1.创建新节点

document对象中包含了多个创建各种节点的方法。《JavaScript高级程序设计》中专门设计了一个表格,来说明每个方法的原型、作用、IE、Firefox、Opera、Safari等浏览器的支持情况。一眼望去几乎都是一些们获得支持的方法(很可能是因为这本书出的时候还很早,各种浏览器的版本都还很小)。

创建节点最有用的方法主要有:CreateElement()、CreateTextNode(),下面分别学习。

2.CreateElement()、CreateTextNode()、appendChild()

现在有如下的需求:在一个HTML的DOM树加载完成之后,添加一个<p>元素,元素的文本内容是"A New Element"。原始的html如下:

  1. <html>
  2. <head>
  3. <title>createElement()Demo</title>
  4. </head>
  5. <body>
  6. </body>
  7. </html>

现在要把<p>A New Element</p>添加到HTML的body中。步骤如下:

  1. //第一步:创建p元素
  2. varoP=document.createElement("p");
  3. //第二步:创建文本节点
  4. varoTxt=document.createTextNode("ANewElement");
  5. //第三步:将文本节点加到p元素的子元素列表中
  6. oP.appendChild(oTxt);
  7. //第四步:将p元素添加到body的子元素列表中
  8. document.body.appendChild(oP);

为了显示出添加的效果,在body中添加一个按钮,一点击就执行上述代码。完整的例子如下:

  1. <html>
  2. <head>
  3. <title>createElement()Demo</title>
  4. <scripttype="text/javascript">
  5. functioncreateElementTest(){
  6. //第一步:创建p元素
  7. varoP=document.createElement("p");
  8. //第二步:创建文本节点
  9. varoTxt=document.createTextNode("ANewElement");
  10. //第三步:将文本节点加到p元素的子元素列表中
  11. oP.appendChild(oTxt);
  12. //第四步:将p元素添加到body的子元素列表中
  13. document.body.appendChild(oP);
  14. }
  15. </script>
  16. </head>
  17. <body>
  18. <inputtype="button"value="添加"onclick="createElementTest()"/>
  19. </body>
  20. </html>

3. removeChild(),replaceChild(),insertBefore()方法

既然能添加节点,自然也能删除节点。要删除某个节点,可以调用其parentNode的removeChild()方法删除掉该节点。依然以上面的例子来学习。

  1. //第一步:获取p元素
  2. varoP=document.body.getElementsByTagName("p").item(0);
  3. //第二步:获取p元素的父节点
  4. varpNode=oP.parentNode;
  5. //第三步:调用父节点的删除方法
  6. pNode.removeChild(oP);

完整的代码如下:

  1. <html>
  2. <head>
  3. <title>createElement()Demo</title>
  4. <scripttype="text/javascript">
  5. functioncreateElementTest(){
  6. //第一步:创建p元素
  7. varoP=document.createElement("p");
  8. //第二步:创建文本节点
  9. varoTxt=document.createTextNode("ANewElement");
  10. //第三步:将文本节点加到p元素的子元素列表中
  11. oP.appendChild(oTxt);
  12. //第四步:将p元素添加到body的子元素列表中
  13. document.body.appendChild(oP);
  14. }
  15. functionremoveChildTest(){
  16. //第一步:获取p元素
  17. varoP=document.body.getElementsByTagName("p").item(0);
  18. //第二步:获取p元素的父节点
  19. varpNode=oP.parentNode;
  20. //第三步:调用父节点的删除方法
  21. pNode.removeChild(oP);
  22. }
  23. </script>
  24. </head>
  25. <body>
  26. <inputtype="button"value="添加"onclick="createElementTest()"/>
  27. <inputtype="button"value="删除"onclick="removeChildTest()"/>
  28. </body>
  29. </html>

此外,我们也可以不删除节点,而只是替换节点。当然,这个也需要通过调用被替换节点的父节点的方法来实现。现在我们要吧p元素的内容替换成Hello,World!。replaceChild()方法有两个参数:新节点,被替换节点。代码如下:

  1. //第一步:创建需要替换的节点
  2. varnewTxt=document.createTextNode("Hello,World!");
  3. //第二步:获取到被替换的节点
  4. varoldTxt=document.body.getElementsByTagName("p").item(0).childNodes.item(0);
  5. //第三步:获取到需要被替换节点的父节点
  6. varoP=document.body.getElementsByTagName("p").item(0);
  7. //第四步:替换文本节点
  8. oP.replaceChild(newTxt,oldTxt);

再添加一个按钮来触发替换文本的方法:

  1. <html>
  2. <head>
  3. <title>createElement()Demo</title>
  4. <scripttype="text/javascript">
  5. functioncreateElementTest(){
  6. //第一步:创建p元素
  7. varoP=document.createElement("p");
  8. //第二步:创建文本节点
  9. varoTxt=document.createTextNode("ANewElement");
  10. //第三步:将文本节点加到p元素的子元素列表中
  11. oP.appendChild(oTxt);
  12. //第四步:将p元素添加到body的子元素列表中
  13. document.body.appendChild(oP);
  14. }
  15. functionremoveChildTest(){
  16. //第一步:获取p元素
  17. varoP=document.body.getElementsByTagName("p").item(0);
  18. //第二步:获取p元素的父节点
  19. varpNode=oP.parentNode;
  20. //第三步:调用父节点的删除方法
  21. pNode.removeChild(oP);
  22. }
  23. functionreplaceChildTest(){
  24. //第一步:创建需要替换的节点
  25. varnewTxt=document.createTextNode("Hello,World!");
  26. //第二步:获取到被替换的节点
  27. varoldTxt=document.body.getElementsByTagName("p").item(0).childNodes.item(0);
  28. //第三步:获取到需要被替换节点的父节点
  29. varoP=document.body.getElementsByTagName("p").item(0);
  30. //第四步:替换文本节点
  31. oP.replaceChild(newTxt,oldTxt);
  32. }
  33. </script>
  34. </head>
  35. <body>
  36. <inputtype="button"value="添加"onclick="createElementTest()"/>
  37. <inputtype="button"value="删除"onclick="removeChildTest()"/>
  38. <inputtype="button"value="替换"onclick="replaceChildTest()"/>
  39. </body>
  40. </html>

最后,我们还可以在一个节点之前插入另一个节点。这就是方法insertBefore()的作用。这个方法也有两个参数:新节点和插在哪个节点之前。接着上面的例子,我们在第一个p元素之前插入另一个p元素,元素的文本是a new element。

代码如下:

  1. varnewNode=document.createElement("p");
  2. varnewTxt=document.createTextNode("anewelement");
  3. newNode.appendChild(newTxt);
  4. varoldNode=document.body.getElementsByTagName("p")[0];
  5. varpNode=oldNode.parentNode;
  6. pNode.insertBefore(newNode,oldNode);

完整的代码如下:

  1. <html>
  2. <head>
  3. <title>createElement()Demo</title>
  4. <scripttype="text/javascript">
  5. functioncreateElementTest(){
  6. //第一步:创建p元素
  7. varoP=document.createElement("p");
  8. //第二步:创建文本节点
  9. varoTxt=document.createTextNode("ANewElement");
  10. //第三步:将文本节点加到p元素的子元素列表中
  11. oP.appendChild(oTxt);
  12. //第四步:将p元素添加到body的子元素列表中
  13. document.body.appendChild(oP);
  14. }
  15. functionremoveChildTest(){
  16. //第一步:获取p元素
  17. varoP=document.body.getElementsByTagName("p").item(0);
  18. //第二步:获取p元素的父节点
  19. varpNode=oP.parentNode;
  20. //第三步:调用父节点的删除方法
  21. pNode.removeChild(oP);
  22. }
  23. functionreplaceChildTest(){
  24. //第一步:创建需要替换的节点
  25. varnewTxt=document.createTextNode("Hello,World!");
  26. //第二步:获取到被替换的节点
  27. varoldTxt=document.body.getElementsByTagName("p").item(0).childNodes.item(0);
  28. //第三步:获取到需要被替换节点的父节点
  29. varoP=document.body.getElementsByTagName("p").item(0);
  30. //第四步:替换文本节点
  31. oP.replaceChild(newTxt,oldTxt);
  32. }
  33. functioninsertBeforeTest(){
  34. varnewNode=document.createElement("p");
  35. varnewTxt=document.createTextNode("anewelement");
  36. newNode.appendChild(newTxt);
  37. varoldNode=document.body.getElementsByTagName("p")[0];
  38. varpNode=oldNode.parentNode;
  39. pNode.insertBefore(newNode,oldNode);
  40. }
  41. </script>
  42. </head>
  43. <body>
  44. <inputtype="button"value="添加"onclick="createElementTest()"/>
  45. <inputtype="button"value="删除"onclick="removeChildTest()"/>
  46. <inputtype="button"value="替换"onclick="replaceChildTest()"/>
  47. <inputtype="button"value="插入"onclick="insertBeforeTest()"/>
  48. </body>
  49. </html>

参考书目:

《JavaScript高级编程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值