最新的Web開發教程
 

JavaScript HTML DOM導航


隨著HTML DOM,您可以使用節點的關係導航節點樹。


DOM節點

根據W3C HTML DOM標準,一切HTML文檔中的一個節點:

  • 整個文檔是文檔節點
  • 每一個HTML元素是元素節點
  • HTML元素中的文本是文本節點
  • 每個HTML屬性是一個屬性節點
  • 所有評論都是註釋節點
HTML DOM樹

與HTML DOM,在節點樹中的所有節點都可以通過JavaScript訪問。

新節點可以被創建,並且所有節點都可以被修改或刪除。


節點的關係

在節點樹中的節點必須彼此的層級關係。

術語父母,子女,兄弟姐妹和用於描述該關係。

  • 在節點樹中,頂節點被稱為根(或根節點)
  • 每個節點都只有一個父親,除了根(它沒有父)
  • 一個節點可以有一些兒童
  • 兄弟姐妹(兄弟或姐妹)擁有相同的父節點
<html>

  <head>
      <title>DOM Tutorial</title>
  </head>

  <body>
      <h1>DOM Lesson one</h1>
      <p>Hello world!</p>
  </body>

</html>
節點樹

從上面的HTML你可以閱讀:

  • <html>是根節點
  • <html>沒有父母
  • <html>是父<head><body>
  • <head>是第一個孩子<html>
  • <body>是最後一個子<html>

和:

  • <head>有一個子: <title>
  • <title>有一個子元素(文本節點):“DOM教程”
  • <body>有兩個孩子<h1><p>
  • <h1>有一個孩子:“DOM第一課”
  • <p>有一個孩子:“世界,你好!”
  • <h1><p>是兄弟

導航節點間

您可以使用以下節點屬性用JavaScript節點之間導航:

  • parentNode
  • childNodes[ nodenumber ]
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

警告 !

在DOM處理一個常見的錯誤是期望包含文字元素節點。

在這個例子中:<title> DOM教程</title>元素節點<title>不包含文本。它包含值“DOM教程”一文節點 。

文本節點的值可以由該節點的被訪問innerHTML屬性或nodeValue


Child節點和節點值

除了innerHTML屬性,您還可以使用childNodesnodeValue屬性來獲得元素的內容。

下面的示例收集了的節點值<h1>元素,並將其複製到<p>元素:

<html>
<body>

<h1 id="intro">My First Page</h1>

<p id="demo">Hello!</p>

<script>
var myText = document.getElementById("intro").childNodes[0].nodeValue;
document.getElementById("demo").innerHTML = myText;
</script>

</body>
</html>
試一試»

在上面的例子中, getElementById是一種方法,而childNodesnodeValue是屬性。

在本教程中,我們使用innerHTML屬性。 然而,學習上述方法對於理解樹結構和DOM的導航有用的。

使用firstChild屬性是相同的使用childNodes[0]

<html>
<body>

<h1 id="intro">My First Page</h1>

<p id="demo">Hello World!</p>

<script>
myText = document.getElementById("intro").firstChild.nodeValue;
document.getElementById("demo").innerHTML = myText;
</script>

</body>
</html>
試一試»

DOM根節點

有兩個特殊的屬性,允許訪問完整的文檔:

  • document.body -文檔的主體
  • document.documentElement -該文件全文

<html>
<body>

<p>Hello World!</p>
<div>
<p>The DOM is very useful!</p>
<p>This example demonstrates the <b>document.body</b> property.</p>
</div>

<script>
alert(document.body.innerHTML);
</script>

</body>
</html>
試一試»

<html>
<body>

<p>Hello World!</p>
<div>
<p>The DOM is very useful!</p>
<p>This example demonstrates the <b>document.documentElement</b> property.</p>
</div>

<script>
alert(document.documentElement.innerHTML);
</script>

</body>
</html>
試一試»

nodeName屬性

nodeName屬性指定節點的名稱。

  • nodeName為只讀
  • nodeName元素節點的相同標籤名
  • nodeName屬性節點是屬性名稱
  • nodeName文本節點的永遠是#text
  • nodeName的文檔節點的是總是#document

注意: nodeName總是包含HTML元素的大寫標籤名。


nodeValue屬性

nodeValue屬性指定節點的值。

  • nodeValue元素節點是未定義
  • nodeValue對於文本節點是文本本身
  • nodeValue為屬性節點是屬性值

nodeType物業

nodeType屬性返回節點的類型。 nodeType是只讀的。

最重要的節點類型是:

元素類型 的NodeType
Element 1
Attribute 2
Text 3
Comment 8
Document 9