JS之DOM基础知识总结

本文介绍了 HTML DOM 的基本概念及常用方法与属性,包括选择、修改、创建和删除元素的操作技巧,以及如何利用 DOM 进行事件处理和节点关系导航。
  1. 在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。  
  2. 所有 HTML 元素被定义为对象,其包含对象方法和对象属性。  
  3. 方法是能够执行的动作(比如添加或修改元素)。  
  4. 属性是能够获取或设置的值(比如节点的名称或内容)。  
  5.   
  6.   
  7. HTML DOM 对象 - 方法和属性  
  8. 一些常用的 HTML DOM 方法:  
  9. getElementById(id) - 获取带有指定 id 的节点(元素)  
  10. appendChild(node) - 插入新的子节点(元素)  
  11. removeChild(node) - 删除子节点(元素)  
  12.   
  13.   
  14. 方法  
  15. getElementById()    返回带有指定 ID 的元素。  
  16. getElementsByTagName()  返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。  
  17. getElementsByClassName()    返回包含带有指定类名的所有元素的节点列表。  
  18. appendChild()   把新的子节点添加到指定节点。  
  19. insertBefore()  在指定的子节点前面插入新的子节点。  
  20. removeChild()   删除子节点。  
  21. replaceChild()  替换子节点。  
  22. createAttribute()   创建属性节点。  
  23. createElement() 创建元素节点。  
  24. createTextNode()    创建文本节点。  
  25. getAttribute()  返回指定的属性值。  
  26. setAttribute()  把指定属性设置或修改为指定的值。  
  27.   
  28.   
  29.   
  30.   
  31. 一些常用的 HTML DOM 属性:  
  32. innerHTML - 节点(元素)的文本值。获取元素内容的最简单方法是使用 innerHTML 属性,innerHTML 属性对于获取或替换 HTML 元素的内容很有用。  
  33. <script>  
  34. var txt=document.getElementById("intro").innerHTML;  
  35. document.write(txt);  
  36. </script>  
  37.   
  38.   
  39. parentNode - 节点(元素)的父节点  
  40. childNodes - 节点(元素)的子节点  
  41. attributes - 节点(元素)的属性节点  
  42.   
  43.   
  44. nodeValue 属性规定节点的值。  
  45. 元素节点的 nodeValue 是 undefined 或 null  
  46. 文本节点的 nodeValue 是文本本身  
  47. 属性节点的 nodeValue 是属性值  
  48. <html>  
  49. <body>  
  50. <p id="intro">Hello World!</p>  
  51. <script type="text/javascript">  
  52. x=document.getElementById("intro");  
  53. document.write(x.firstChild.nodeValue);  
  54. </script>  
  55. </body>  
  56. </html>  
  57.   
  58.   
  59. nodeType 属性返回节点的类型。nodeType 是只读的。  
  60. 元素类型    NodeType  
  61. 元素  1  
  62. 属性  2  
  63. 文本  3  
  64. 注释  8  
  65. 文档  9  
  66.   
  67.   
  68.   
  69.   
  70. 访问 HTML 元素(节点)等同于访问节点:  
  71. 能够以不同的方式来访问 HTML 元素:  
  72. 通过使用 getElementById() 方法  
  73. 通过使用 getElementsByTagName() 方法  
  74. 通过使用 getElementsByClassName() 方法  
  75.   
  76.   
  77. document.getElementById("main").getElementsByTagName("p"); //返回包含文档中所有 <p> 元素的节点列表,并且这些 <p> 元素应该是 id="main" 的元素的后代(子、孙等等):  
  78. getElementsByTagName() 方法返回节点列表。节点列表是一个节点数组。可以通过下标号访问这些节点(下标号从 0 开始)。如需访问第二个 <p>,您可以这么写:y=x[1];  
  79. length 属性定义节点列表中节点的数量,使用 length 属性来循环节点列表:  
  80. x=document.getElementsByTagName("p");  
  81.   
  82.   
  83. for (i=0;i<x.length;i++)  
  84. {  
  85. document.write(x[i].innerHTML);  
  86. document.write("<br />");  
  87. }  
  88.   
  89.   
  90. 查找带有相同类名的所有 HTML 元素,请使用这个方法:document.getElementsByClassName("intro");  
  91. 注释:getElementsByClassName() 在 Internet Explorer 5,6,7,8 中无效。  
  92.   
  93.   
  94. 修改 HTML DOM 意味着许多不同的方面:  
  95. 改变 HTML 内容--->document.getElementById("p1").innerHTML="New text!";  
  96. 改变 CSS 样式--->document.getElementById("p2").style.color="blue";  
  97. 改变 HTML 属性---->document.getElementById("p1").setAttribute('abc2','abc2');获取-->e.getAttribute('className');  
  98. 创建新的 HTML 元素---->先创建该元素(元素节点),然后追加到已有的元素上。  
  99. <script>  
  100. var para=document.createElement("p");  
  101. var node=document.createTextNode("This is new.");  
  102. para.appendChild(node);  
  103.   
  104.   
  105. var element=document.getElementById("d1");  
  106. element.appendChild(para);  
  107. </script>  
  108.   
  109.   
  110. 删除已有的 HTML 元素---->document.body.removeChild('div');父节点删除其子节点;  
  111. 找到您需要删除的子元素,然后使用 parentNode 属性来查找其父元素:  
  112. var child=document.getElementById("p1");  
  113. child.parentNode.removeChild(child);  
  114.   
  115.   
  116. 替换已有的元素-------->parent.replaceChild(para,child);  
  117. <div id="div1">  
  118. <p id="p1">This is a paragraph.</p>  
  119. <p id="p2">This is another paragraph.</p>  
  120. </div>  
  121.   
  122.   
  123. <script>  
  124. var para=document.createElement("p");  
  125. var node=document.createTextNode("This is new.");  
  126. para.appendChild(node);  
  127.   
  128.   
  129. var parent=document.getElementById("div1");  
  130. var child=document.getElementById("p1");  
  131. parent.replaceChild(para,child);  
  132. </script>  
  133.   
  134.   
  135.   
  136.   
  137. 改变事件(处理程序)----> <h1 onclick="this.innerHTML='hello!'">请点击这段文本!</h1>  
  138. <html>  
  139. <body>  
  140. <input type="button" onclick="document.body.style.backgroundColor='lavender';"  
  141. value="Change background color" />  
  142. </body>  
  143. </html>  
  144.   
  145.   
  146.   
  147.   
  148. 导航节点关系:  
  149. 使用三个节点属性:parentNode、firstChild 以及 lastChild ,在文档结构中进行导航,还有:  
  150. childNodes(返回当前元素的所有子元素的数组);  
  151. nextSibling(返回紧跟当前元素后面的元素);  
  152. previousSibling(返回紧跟当前元素之前的元素);  
  153. hasChildNodes() 返回一个Boolean,指示元素是否有子元素;  
  154. <html>  
  155. <body>  
  156. <p>Hello World!</p>  
  157. <div>  
  158.   <p>DOM 很有用!</p>  
  159.   <p>本例演示节点关系。</p>  
  160. </div>  
  161. </body>  
  162. </html>  
  163. 首个 <p> 元素是 <body> 元素的首个子元素(firstChild)  
  164. <div> 元素是 <body> 元素的最后一个子元素(lastChild)  
  165. <body> 元素是首个 <p> 元素和 <div> 元素的父节点(parentNode)  
  166. firstChild 属性可用于访问元素的文本:  
  167. <script>  
  168. x=document.getElementById("intro");  
  169. document.write(x.firstChild.nodeValue);  
  170. </script>  
  171.   
  172.   
  173. childNodes 和 nodeValue:除了 innerHTML 属性,也可以使用 childNodes 和 nodeValue 属性来获取元素的内容。  
  174. <html>  
  175. <body>  
  176. <p id="intro">Hello World!</p>  
  177. <script>  
  178. var txt=document.getElementById("intro").childNodes[0].nodeValue;  
  179. document.write(txt);  
  180. </script>  
  181. </body>  
  182. </html>  
在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。
所有 HTML 元素被定义为对象,其包含对象方法和对象属性。
方法是能够执行的动作(比如添加或修改元素)。
属性是能够获取或设置的值(比如节点的名称或内容)。


HTML DOM 对象 - 方法和属性
一些常用的 HTML DOM 方法:
getElementById(id) - 获取带有指定 id 的节点(元素)
appendChild(node) - 插入新的子节点(元素)
removeChild(node) - 删除子节点(元素)


方法
getElementById()	返回带有指定 ID 的元素。
getElementsByTagName()	返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName()	返回包含带有指定类名的所有元素的节点列表。
appendChild()	把新的子节点添加到指定节点。
insertBefore()	在指定的子节点前面插入新的子节点。
removeChild()	删除子节点。
replaceChild()	替换子节点。
createAttribute()	创建属性节点。
createElement()	创建元素节点。
createTextNode()	创建文本节点。
getAttribute()	返回指定的属性值。
setAttribute()	把指定属性设置或修改为指定的值。




一些常用的 HTML DOM 属性:
innerHTML - 节点(元素)的文本值。获取元素内容的最简单方法是使用 innerHTML 属性,innerHTML 属性对于获取或替换 HTML 元素的内容很有用。
<script>
var txt=document.getElementById("intro").innerHTML;
document.write(txt);
</script>


parentNode - 节点(元素)的父节点
childNodes - 节点(元素)的子节点
attributes - 节点(元素)的属性节点


nodeValue 属性规定节点的值。
元素节点的 nodeValue 是 undefined 或 null
文本节点的 nodeValue 是文本本身
属性节点的 nodeValue 是属性值
<html>
<body>
<p id="intro">Hello World!</p>
<script type="text/javascript">
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
</script>
</body>
</html>


nodeType 属性返回节点的类型。nodeType 是只读的。
元素类型	NodeType
元素	1
属性	2
文本	3
注释	8
文档	9




访问 HTML 元素(节点)等同于访问节点:
能够以不同的方式来访问 HTML 元素:
通过使用 getElementById() 方法
通过使用 getElementsByTagName() 方法
通过使用 getElementsByClassName() 方法


document.getElementById("main").getElementsByTagName("p"); //返回包含文档中所有 <p> 元素的节点列表,并且这些 <p> 元素应该是 id="main" 的元素的后代(子、孙等等):
getElementsByTagName() 方法返回节点列表。节点列表是一个节点数组。可以通过下标号访问这些节点(下标号从 0 开始)。如需访问第二个 <p>,您可以这么写:y=x[1];
length 属性定义节点列表中节点的数量,使用 length 属性来循环节点列表:
x=document.getElementsByTagName("p");


for (i=0;i<x.length;i++)
{
document.write(x[i].innerHTML);
document.write("<br />");
}


查找带有相同类名的所有 HTML 元素,请使用这个方法:document.getElementsByClassName("intro");
注释:getElementsByClassName() 在 Internet Explorer 5,6,7,8 中无效。


修改 HTML DOM 意味着许多不同的方面:
改变 HTML 内容--->document.getElementById("p1").innerHTML="New text!";
改变 CSS 样式--->document.getElementById("p2").style.color="blue";
改变 HTML 属性---->document.getElementById("p1").setAttribute('abc2','abc2');获取-->e.getAttribute('className');
创建新的 HTML 元素---->先创建该元素(元素节点),然后追加到已有的元素上。
<script>
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);


var element=document.getElementById("d1");
element.appendChild(para);
</script>


删除已有的 HTML 元素---->document.body.removeChild('div');父节点删除其子节点;
找到您需要删除的子元素,然后使用 parentNode 属性来查找其父元素:
var child=document.getElementById("p1");
child.parentNode.removeChild(child);


替换已有的元素-------->parent.replaceChild(para,child);
<div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>


<script>
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);


var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.replaceChild(para,child);
</script>




改变事件(处理程序)----> <h1 onclick="this.innerHTML='hello!'">请点击这段文本!</h1>
<html>
<body>
<input type="button" onclick="document.body.style.backgroundColor='lavender';"
value="Change background color" />
</body>
</html>




导航节点关系:
使用三个节点属性:parentNode、firstChild 以及 lastChild ,在文档结构中进行导航,还有:
childNodes(返回当前元素的所有子元素的数组);
nextSibling(返回紧跟当前元素后面的元素);
previousSibling(返回紧跟当前元素之前的元素);
hasChildNodes() 返回一个Boolean,指示元素是否有子元素;
<html>
<body>
<p>Hello World!</p>
<div>
  <p>DOM 很有用!</p>
  <p>本例演示节点关系。</p>
</div>
</body>
</html>
首个 <p> 元素是 <body> 元素的首个子元素(firstChild)
<div> 元素是 <body> 元素的最后一个子元素(lastChild)
<body> 元素是首个 <p> 元素和 <div> 元素的父节点(parentNode)
firstChild 属性可用于访问元素的文本:
<script>
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
</script>


childNodes 和 nodeValue:除了 innerHTML 属性,也可以使用 childNodes 和 nodeValue 属性来获取元素的内容。
<html>
<body>
<p id="intro">Hello World!</p>
<script>
var txt=document.getElementById("intro").childNodes[0].nodeValue;
document.write(txt);
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值