首頁 >web前端 >js教程 >JavaScript中的dom是什麼?如何存取dom節點

JavaScript中的dom是什麼?如何存取dom節點

伊谢尔伦
伊谢尔伦原創
2017-07-20 13:20:541990瀏覽

DOM就是Document object Model的縮寫。文檔物件模型是把XML或HTML以樹節點為表現形式的文檔。用DOM方法和屬性,你可以訪問,修改,刪除頁面上任意一個元素,也是可以新增一個元素。 DOM是獨立於語言的API,可以被任意語言實現,當然也包含了Javascript

#看看下面的一個文字。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
 <head> 
  <title>My page</title> 
 </head> 
 <body> 
  <p class="opener">first paragraph</p> 
  <p><em>second</em> paragraph</p> 
  <p id="closer">final</p> 
 </body> 
</html>

我們來看看第二段


#
<p><em>second</em> paragraph</p>

可以看到這是p標籤。它被包含在body標籤中。所以說body是p的父節點,p是子節點。第一段和第三段也是body的子節點。它們都是第二段的兄弟節點。這個em標籤是第二段p的子節點。因此p就是它的父節點。父子節點關係能描繪出像樹一樣的關係。所以叫做DOM結構樹(DOM tree).
 
訪問DOM節點

#當要驗證表單或更換圖片之前,我們要知道怎麼樣存取元素(element.)。有很多方法獲取元素。
Document節點
透過document我們可以存取目前的文件。我們可以透過firebugs(火狐插件),來查看document的屬性和方法。
所有的節點都有nodeType,nodeName,nodeValue的屬性。我們來看看document的nodeType是什麼


document.nodeType;//9

 一共有12節點型別。 document是9。常用的是元素(element:1),屬性(attribute:2),文本(text:3)。
節點還有名稱。對於HTML標籤。節點名稱就是標籤名稱。文字節點(text)的名字是#text.文檔節點(document)的名字是#document.
 
節點也有值。對於文字節點,值就是文字。 document的值為null
documentElement
XML都會有個ROOT節點來包裝文件包含起來。對於HTML文件。 ROOT節點就是html標籤。訪問root節點。可以用documentElement的屬性。


document.documentElement;//<html> 
document.documentElement.nodeType;//1 
document.documentElement.nodeName;//HTML 
document.documentElement.tagName;//对于element,nodeName和tagName相同

 Child Nodes
#為了確定是否包含子節點我們可以用以下方法


document.documentElement.hasChildNodes();//true

 HTML有兩個子節點。


document.documentElement.childNodes.length;//2 
 
document.documentElement.childNodes[0];//<head> 
 
document.documentElement.childNodes[1];//<body>

  也可以透過子節點存取父節點


document.documentElement.childNodes[1].parentNode;//<html>

 我們把body的引用賦值變數


var bd = document.documentElement.childNodes[1]; 
bd.childNodes.length;//9

 讓我們看看body的結構


#
 
 

first paragraph

<p><em>second</em> paragraph</p>

final

  
 為什麼子節點數為9個呢。
 首先是4個P還有一個註解總共4個。
 4個節點包含了3個空白的節點。這就7個。
 第8個在body和第一個p之間的空白節點。
 第9個就是在註解與36cc49f0c466276486e50c850b7e4956之間的空白節點。
 共9個節點。


 快速存取DOM

#透過childNodes,parentNode,nodeName,nodeValue以及attributes,可以存取文件任意的節點了。但是在實際運用過程中,文字節點是比較討厭的。如果文字改變了,有可能就影響腳本了。還有如果DOM樹有足夠的深入,那麼訪問起來的確有些不方便。幸好我們可以用更方便的方法來存取節點。這些方法是


getElementsByTagName()
getElementsByName()
getElementById()

先說下getElementsByTagName()
透過一個標籤名稱(tag name)來取得一個html元素的集合。例子如下


document.getElementsByTagName(&#39;p&#39;).length;//3

因為傳回的是一個集合,我們可以用過陣列下標的形式來存取或透過item方法。比較一下還是推薦用陣列的存取方法。更簡單一些。


document.getElementsByTagName(&#39;p&#39;)[0];// <p class="opener"> 
document.getElementsByTagName(&#39;p&#39;).item(0);//和上面的结果一样 
 
document.getElementsByTagName(&#39;p&#39;)[0].innerHTML;//first paragraph

存取元素的屬性,可以用attributes集合。但是更簡單的方法是直接作為一個屬性來存取就行。看個例子


document.getElementsByTagName(&#39;p&#39;)[2].id;//closer

要注意的是,class屬性不能正常的使用。 。要用className。因為class在javascript規格中是保留字。


document.getElementsByTagName(&#39;p&#39;)[0].className;//opener

我們可以用以下方法存取頁面所有元素


<span style="color: #ff0000;">document.getElementsByTagName(&#39;*&#39;).length;//9</span>

注意:在IE早期的版本不支持上述方法。可以用document.all來取代。 IE7已經支援了,但是傳回的是所有節點(node),而不僅僅是元素節點(element nodes)。
 
Siblings, Body, First, Last Child
nextSibling和previousSibling是兩個較方便存取DOM的方法。用來存取相鄰的節點的。範例如下


var para = document.getElementById(&#39;closer&#39;) 
para.nextSibling;//"\n" 
para.previousSibling;//"\n" 
para.previousSibling.previousSibling;//<p> 
para.previousSibling.previousSibling.previousSibling;//"\n" 
para.previousSibling.previousSibling.nextSibling.nextSibling;// <p id="closer">

body 用來存取body元素的。


document.body;//<body>

firstChild 和lastChild 。 firstChild是和childNodes[0]一樣.lastChild和 childNodes[childNodes.length - 1]一樣。

以上是JavaScript中的dom是什麼?如何存取dom節點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn