详解JavaScript DOM中的Node节点

开发 前端
在DOM(文档对象模型)中,HTML文档的层次结构被表示为树形结构,HTML文档的树形表示主要包含表示元素或标记的节点和标识文本串的节点构成。文章将详细的介绍JavaScript DOM中的Node节点。

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

51CTO推荐阅读:深入解读JavaScript中BOM和DOM

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: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> 

#p#

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> 

【编辑推荐】

  1. 减少浏览器重解析 JavaScript DOM操作优化方案
  2. 详解jQuery对象与DOM对象的相互转换
  3. 深入解读JavaScript中BOM和DOM
  4. IE中JavaScript DOM ready应用技巧
责任编辑:王晓东 来源: CSDN
相关推荐

2010-09-13 16:46:29

JavaScriptHTML DOM节点

2010-09-10 16:21:58

JavaScript

2013-05-08 10:36:07

JavaScriptJS详解JavaScrip

2023-02-23 19:32:03

DOMJavascript开发

2016-04-06 11:29:58

JavaScriptDOM操作

2010-06-07 16:55:00

JavaScript

2010-08-17 15:04:37

JavaScriptDOM ready

2010-09-08 16:50:11

JavaScriptDOM操作

2017-03-20 14:45:42

JavaScript详解

2020-10-19 11:49:32

NodeJavaScript

2009-06-18 12:21:07

javascriptdom

2021-09-09 10:26:26

Javascript 文档对象前端

2020-04-15 15:48:03

Node.jsstream前端

2009-09-21 16:59:29

Array扩展

2023-06-16 07:48:51

DOM对象JS

2010-09-08 17:26:46

JavaScript

2016-10-11 20:33:17

JavaScriptThisWeb

2017-07-19 14:26:01

前端JavaScriptDOM

2010-09-28 14:12:50

Javascript

2023-05-22 10:40:22

WeakMapsMaps
点赞
收藏

51CTO技术栈公众号