JavaScript DOM中的Node节点及节点操作

JavaScript DOM中的Node节点及节点操作
  在DOM(文档对象模型)中,HTML文档的层次结构被表示为树形结构,HTML文档的树形表示主要包含表示元素或标记的节点和标识文本串的节点构成。在JavaScript DOM中,Node常常被翻译成节点,下面我们通过实例,来了解一下Node的属性及方法。
 

Node的属性介绍:

  1. nodeType:显示节点的类型  
  2. nodeName:显示节点的名称  
  3. nodeValue:显示节点的值  
  4. attributes:获取一个属性节点  
  5. firstChild:表示某一节点的第一个节点  
  6. lastChild:表示某一节点的最后一个子节点  
  7. childNodes:表示所在节点的所有子节点  
  8. parentNode:表示所在节点的父节点  
  9. nextSibling:紧挨着当前节点的下一个节点  
  10. previousSibling:紧挨着当前节点的上一个节点 

Node有各种各样的节点,我们先花一些时间认识他们,同时一并了解nodeType,nodeName和nodeValue属性:

 

节点的nodeType 值可能返回如下属性:

1-ELEMENT //元素节点
2-ATTRIBUTE //属性节点
3-TEXT //文本节点
4-CDATA
 
5-ENTITY REFERENCE 
6-ENTITY 
7-PI (processing instruction) 
8-COMMENT 
9-DOCUMENT 
10-DOCUMENT TYPE 
11-DOCUMENT FRAGMENT 
12-NOTATION

名称:元素节点

◆nodeType:ELEMENT_NODE

◆nodeType值:1

◆nodeName:元素标记名

◆nodeValue:null

  1. <body> 
  2. <div id = "t" ><span></span></div> 
  3. </body> 
  4. <script> 
  5. var d = document.getElementById("t");  
  6. document.write(d.nodeType);  
  7. document.write(d.nodeName);  
  8. document.write(d.nodeValue);  
  9. //显示 1 DIV null  
  10. </script> 

名称:属性节点

◆nodeType:ATTRIBUTE_NODE

◆nodeType值:2

◆nodeName:属性名

◆nodeValue:属性值

  1. <body> 
  2. <div id = "t" name="aaa"><span></span></div> 
  3. </body> 
  4. <script> 
  5. var d = document.getElementById("t").getAttributeNode("name");  
  6. document.write(d.nodeType);  
  7. document.write(d.nodeName);  
  8. document.write(d.nodeValue);  
  9. //显示 2 name aaa  
  10. </script> 

名称:文本节点

◆nodeType:TEXT_NODE

◆nodeType值:3

◆nodeName:#text

◆nodeValue:文本内容

  1. <body> 
  2. <div id = "t">bbb</div> 
  3. </body> 
  4. <script> 
  5. var d = document.getElementById("t").firstChild;  
  6. document.write(d.nodeType);  
  7. document.write(d.nodeName);  
  8. document.write(d.nodeValue);  
  9. //显示 3 #text bbb  
  10. </script> 

名称:CDATA文本节点(XML中传递文本的格式)

◆nodeType:CDATA_SECTION_NODE

◆nodeType值:4

◆nodeName:#cdata-section

◆nodeValue:CDATA文本内容

attributes属性,直接获取一个属性节点,注意这里要使用[],保持IE和FF的兼容性。

  1. <body name="ddd"> 
  2. <div id = "t" name = "aaa"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
  3. </body> 
  4. <script> 
  5. var d = document.getElementById("t").attributes["name"];  
  6. document.write(d.name);  
  7. document.write(d.value);  
  8. //显示 name aaa  
  9. </script> 

firstChild和lastChild属性,表示某一节点的第一个和最后一个子节点:

  1. <body> 
  2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
  3. </body> 
  4. <script> 
  5. var d = document.getElementById("t");  
  6. document.write(d.firstChild.innerHTML);  
  7. document.write(d.lastChild.innerHTML);  
  8. //显示 aaa ccc  
  9. </script> 

childNodes和parentNode属性,表示所在节点的所有子节点和所在节点的父节点,这里的childNodes注意是一个数组:

  1. <body name="ddd"> 
  2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
  3. </body> 
  4. <script> 
  5. var d = document.getElementById("t");  
  6. document.write(d.childNodes[1].innerHTML);  
  7. document.write(d.parentNode.getAttribute("name"));  
  8. //显示 bbb ddd  
  9. </script> 

nextSibling和previousSibling属性,分别表示在parentNode的childNodes[]数组中,紧挨着当前节点的上一个和下一个节点:

  1. <body name="ddd"> 
  2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
  3. </body> 
  4. <script> 
  5. var d = document.getElementById("t").childNodes[1];  
  6. document.write(d.nextSibling.innerHTML);  
  7. document.write(d.previousSibling.innerHTML);  
  8. //显示 ccc aaa  
  9. </script>  
  10. Node的方法介绍:

    ◆hasChildNodes():判定一个节点是否有子节点

    ◆removeChild():去除一个节点

    ◆appendChild():添加一个节点

    ◆replaceChild():替换一个节点

    ◆insertBefore():指定节点位置插入一个节点

    ◆cloneNode():复制一个节点

    ◆normalize():(不知)

    ◆hasChildNodes()方法:判定一个节点是否有子节点,有返回true,没有返回false

    1. <body name="ddd"> 
    2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
    3. <div id = "m"></div> 
    4. </body> 
    5. <script> 
    6. alert(document.getElementById("t").hasChildNodes());  
    7. alert(document.getElementById("m").hasChildNodes());  
    8. // 第一个true,第二个false  
    9. </script> 

    removeChild()方法:去除一个节点:

    1. <body name="ddd"> 
    2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
    3. </body> 
    4. <script> 
    5. var d = document.getElementById("t").firstChild;  
    6. document.getElementById("t").removeChild(d);  
    7. // <span>aaa</span>被去除  
    8. </script> 

    appendChild()方法:添加一个节点,如果文档树中已经存在该节点,则将它删除,然后在新位置插入。

    1. <body name="ddd"> 
    2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
    3. </body> 
    4. <script> 
    5. var d = document.getElementById("t").firstChild;  
    6. document.getElementById("t").appendChild(d);  
    7. // <span>aaa</span>成了最后一个节点  
    8. </script> 

    replaceChild()方法:从文档树中删除(并返回)指定的子节点,用另一个节点来替换它。

    1. <body name="ddd"> 
    2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
    3. </body> 
    4. <script> 
    5. var newd = document.createElement("span");  
    6. newd.innerHTML = "eee";  
    7. var oldd = document.getElementById("t").lastChild;  
    8. document.getElementById("t").replaceChild(newd,oldd);  
    9. // 最后一项成了 eee  
    10. </script> 

    insertBefore()方法:在指定节点的前面插入一个节点,如果已经存在,则删除原来的,然后在新位置插入。

    1. <body name="ddd"> 
    2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div> 
    3. </body> 
    4. <script> 
    5. var newd = document.createElement("span");  
    6. newd.innerHTML = "eee";  
    7. var where = document.getElementById("t").lastChild;  
    8. document.getElementById("t").insertBefore(newd,where);  
    9. // 在最后一项的前面多了一项 eee  
    10. </script> 

    cloneNode()方法:复制一个节点,该方法有一个参数,true表示同时复制所有的子节点,false表示近复制当前节点。

    1. <body name="ddd"> 
    2. <div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div><div id = "m"></div> 
    3. </body> 
    4. <script> 
    5. var what = document.getElementById("t").cloneNode(false).innerHTML;  
    6. document.getElementById("m").innerHTML = what;  
    7. // 增加了一个aaabbbccc  
    8. </script>  
    9.  
    10. 1.Node往往被翻译为节点,在一个对象(可以简单的理解为是HTML页面中),一个属性name="aaa"可以是一个节点,一个< div id="aaa">……< /div>也可以是一个节点,在< body>……< /body>中的,也是一个大大的节点。下面是一些有关Node的属性和方法,并没有包含部分不兼容IE和FF内容的讲解。   
      2.  
      3.Node的属性介绍:   
      4.  
      5.nodeType:显示节点的类型   
      6.nodeName:显示节点的名称   
      7.nodeValue:显示节点的值   
      8.attributes:获取一个属性节点   
      9.firstChild:表示某一节点的第一个节点   
      10.lastChild:表示某一节点的最后一个子节点   
      11.childNodes:表示所在节点的所有子节点   
      12.parentNode:表示所在节点的父节点   
      13.nextSibling:紧挨着当前节点的下一个节点   
      14.previousSibling:紧挨着当前节点的上一个节点   
      15.ownerDocument:(不知)   
      16.  
      17.Node有各种各样的节点,我们先花一些时间认识他们,同时一并了解nodeType,nodeName和nodeValue属性:   
      18.名称:元素节点   
      19.nodeType:ELEMENT_NODE   
      20.nodeType值:1   
      21.nodeName:元素标记名   
      22.nodeValue:null  
      23.  
      24.<body>   
      25.<div id = "t" ><span></span></div>   
      26.</body>   
      27.<script>   
      28.var d = document.getElementById("t");   
      29.document.write(d.nodeType);   
      30.document.write(d.nodeName);   
      31.document.write(d.nodeValue);   
      32.//显示 1 DIV null   
      33.</script>   
      34.名称:属性节点   
      35.nodeType:ATTRIBUTE_NODE   
      36.nodeType值:2   
      37.nodeName:属性名   
      38.nodeValue:属性值   
      39.  
      40.<body>   
      41.<div id = "t" name="aaa"><span></span></div>   
      42.</body>   
      43.<script>   
      44.var d = document.getElementById("t").getAttributeNode("name");   
      45.document.write(d.nodeType);   
      46.document.write(d.nodeName);   
      47.document.write(d.nodeValue);   
      48.//显示 2 name aaa   
      49.</script>   
      50.名称:文本节点   
      51.nodeType:TEXT_NODE   
      52.nodeType值:3   
      53.nodeName:#text   
      54.nodeValue:文本内容   
      55.  
      56.<body>   
      57.<div id = "t">bbb</div>   
      58.</body>   
      59.<script>   
      60.var d = document.getElementById("t").firstChild;   
      61.document.write(d.nodeType);   
      62.document.write(d.nodeName);   
      63.document.write(d.nodeValue);   
      64.//显示 3 #text bbb    
      65.</script>   
      66.名称:CDATA文本节点(XML中传递文本的格式)   
      67.nodeType:CDATA_SECTION_NODE   
      68.nodeType值:4   
      69.nodeName:#cdata-section   
      70.nodeValue:CDATA文本内容   
      71.  
      72.(作者省略8个属性,需技术补充)   
      73.  
      74.attributes属性,直接获取一个属性节点,注意这里要使用[],保持IE和FF的兼容性。   
      75.  
      76.<body name="ddd">   
      77.<div id = "t" name = "aaa"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      78.</body>   
      79.<script>   
      80.var d = document.getElementById("t").attributes["name"];   
      81.document.write(d.name);   
      82.document.write(d.value);   
      83.//显示 name aaa   
      84.</script>   
      85.firstChild和lastChild属性,表示某一节点的第一个和最后一个子节点:   
      86.  
      87.<body>   
      88.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      89.</body>   
      90.<script>   
      91.var d = document.getElementById("t");   
      92.document.write(d.firstChild.innerHTML);   
      93.document.write(d.lastChild.innerHTML);   
      94.//显示 aaa ccc   
      95.</script>   
      96.childNodes和parentNode属性,表示所在节点的所有子节点和所在节点的父节点,这里的childNodes注意是一个数组:   
      97.  
      98.<body name="ddd">   
      99.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      100.</body>   
      101.<script>   
      102.var d = document.getElementById("t");   
      103.document.write(d.childNodes[1].innerHTML);   
      104.document.write(d.parentNode.getAttribute("name"));   
      105.//显示 bbb ddd   
      106.</script>   
      107.nextSibling和previousSibling属性,分别表示在parentNode的childNodes[]数组中,紧挨着当前节点的上一个和下一个节点:   
      108.  
      109.<body name="ddd">   
      110.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      111.</body>   
      112.<script>   
      113.var d = document.getElementById("t").childNodes[1];   
      114.document.write(d.nextSibling.innerHTML);   
      115.document.write(d.previousSibling.innerHTML);   
      116.//显示 ccc aaa   
      117.</script>   
      118.ownerDocument属性(不知如何使用)   
      119.  
      120.Node的方法介绍:   
      121.  
      122.hasChildNodes():判定一个节点是否有子节点   
      123.removeChild():去除一个节点   
      124.appendChild():添加一个节点   
      125.replaceChild():替换一个节点   
      126.insertBefore():指定节点位置插入一个节点   
      127.cloneNode():复制一个节点   
      128.normalize():(不知)   
      129.  
      130.hasChildNodes()方法:判定一个节点是否有子节点,有返回true,没有返回false  
      131.  
      132.<body name="ddd">   
      133.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      134.<div id = "m"></div>   
      135.</body>   
      136.<script>   
      137.alert(document.getElementById("t").hasChildNodes());   
      138.alert(document.getElementById("m").hasChildNodes());   
      139.// 第一个true,第二个false   
      140.</script>   
      141.removeChild()方法:去除一个节点   
      142.  
      143.<body name="ddd">   
      144.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      145.</body>   
      146.<script>   
      147.var d = document.getElementById("t").firstChild;   
      148.document.getElementById("t").removeChild(d);   
      149.// <span>aaa</span>被去除   
      150.</script>   
      151.appendChild()方法:添加一个节点,如果文档树中已经存在该节点,则将它删除,然后在新位置插入。   
      152.  
      153.<body name="ddd">   
      154.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      155.</body>   
      156.<script>   
      157.var d = document.getElementById("t").firstChild;   
      158.document.getElementById("t").appendChild(d);   
      159.// <span>aaa</span>成了最后一个节点   
      160.</script>   
      161.replaceChild()方法:从文档树中删除(并返回)指定的子节点,用另一个节点来替换它。   
      162.  
      163.<body name="ddd">   
      164.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      165.</body>   
      166.<script>   
      167.var newd = document.createElement("span");   
      168.newd.innerHTML = "eee";   
      169.var oldd = document.getElementById("t").lastChild;   
      170.document.getElementById("t").replaceChild(newd,oldd);   
      171.// 最后一项成了 eee   
      172.</script>   
      173.insertBefore()方法:在指定节点的前面插入一个节点,如果已经存在,则删除原来的,然后在新位置插入   
      174.  
      175.<body name="ddd">   
      176.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div>   
      177.</body>   
      178.<script>   
      179.var newd = document.createElement("span");   
      180.newd.innerHTML = "eee";   
      181.var where = document.getElementById("t").lastChild;   
      182.document.getElementById("t").insertBefore(newd,where);   
      183.// 在最后一项的前面多了一项 eee   
      184.</script>   
      185.cloneNode()方法:复制一个节点,该方法有一个参数,true表示同时复制所有的子节点,false表示近复制当前节点  
      186.  
      187.<body name="ddd">   
      188.<div id = "t"><span>aaa</span><span>bbb</span><span>ccc</span></div><div id = "m"></div>   
      189.</body>   
      190.<script>   
      191.var what = document.getElementById("t").cloneNode(false).innerHTML;   
      192.document.getElementById("m").innerHTML = what;   
      193.// 增加了一个aaabbbccc   
      194.</script>

      其它部分

      top:分割窗口最高层次的浏览器窗口。采用如下方式进行访问:top.frames['sub_frm'].*********

      parent:当前分割窗口的父窗口。采用如下方式访问:parent.document.*********

      opener:指用WINDOW.OPEN等方式创建的新窗口对应的原窗口。

      iframe: 在一个页面含有某个iframe,其id="iframeA" name="IframeA",此时使用document.getElementById("IframeA")取到的是iframe标签对象,通过该对 象可以获取iframe的各个属性,例如src、frameborder、style等等,但是不能获取到iframe所包含的子页面的各个对象。如果使 用document.frames("IframeA")取到的是iframe组件对象,通过该对象可以获取到iframe所包含的页面的子页面的各个对 象,例如子页面的window对象,但是不能获得iframe标签得各个属性,例如上面说到的src等等。请参看如下类似代码:
      1.html
      <script>
      function check(){
          var obj1=document.getElementById("myframe");
          alert(obj1.src);
          //alert(obj1.window.document.myform.username.value);//Error
          var obj2=document.frames("myframe");
          alert(obj2.window.document.myform.username.value);
          //alert(obj2.src);//Error
      }
      </script>
      <body οnlοad="check()">
      <iframe id="myframe" name="myframe" src="http://dearhappyfish.blog.163.com/blog/2.html" frameborder="3" style="width:300;height:200;border-width:1;border-color:red;border-style:solid"></iframe>
      </body>
      2.html
      <body>
      <form name="myform">
          用户名:<input type="text" name="username" value="test" />
      </form>
      </body>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值