
- Javascript 基礎教程
- Javascript - 首頁
- JavaScript - 路線圖
- JavaScript - 概述
- JavaScript - 特性
- JavaScript - 啟用
- JavaScript - 放置
- JavaScript - 語法
- JavaScript - Hello World
- JavaScript - Console.log()
- JavaScript - 註釋
- JavaScript - 變數
- JavaScript - let 語句
- JavaScript - 常量
- JavaScript - 資料型別
- JavaScript - 型別轉換
- JavaScript - 嚴格模式
- JavaScript - 保留關鍵字
- JavaScript 運算子
- JavaScript - 運算子
- JavaScript - 算術運算子
- JavaScript - 比較運算子
- JavaScript - 邏輯運算子
- JavaScript - 位運算子
- JavaScript - 賦值運算子
- JavaScript - 條件運算子
- JavaScript - typeof 運算子
- JavaScript - 空值合併運算子
- JavaScript - 刪除運算子
- JavaScript - 逗號運算子
- JavaScript - 分組運算子
- JavaScript - Yield 運算子
- JavaScript - 展開運算子
- JavaScript - 冪運算子
- JavaScript - 運算子優先順序
- JavaScript 控制流
- JavaScript - If...Else
- JavaScript - While 迴圈
- JavaScript - For 迴圈
- JavaScript - For...in
- Javascript - For...of
- JavaScript - 迴圈控制
- JavaScript - Break 語句
- JavaScript - Continue 語句
- JavaScript - Switch Case
- JavaScript - 使用者定義迭代器
- JavaScript 函式
- JavaScript - 函式
- JavaScript - 函式表示式
- JavaScript - 函式引數
- JavaScript - 預設引數
- JavaScript - Function() 建構函式
- JavaScript - 函式提升
- JavaScript - 自執行函式
- JavaScript - 箭頭函式
- JavaScript - 函式呼叫
- JavaScript - Function call()
- JavaScript - Function apply()
- JavaScript - Function bind()
- JavaScript - 閉包
- JavaScript - 變數作用域
- JavaScript - 全域性變數
- JavaScript - 智慧函式引數
- JavaScript 物件
- JavaScript - Number
- JavaScript - Boolean
- JavaScript - Strings
- JavaScript - Arrays
- JavaScript - Date
- JavaScript - DataView
- JavaScript - Handler
- JavaScript - Math
- JavaScript - RegExp
- JavaScript - Symbol
- JavaScript - Sets
- JavaScript - WeakSet
- JavaScript - Maps
- JavaScript - WeakMap
- JavaScript - 可迭代物件
- JavaScript - Reflect
- JavaScript - TypedArray
- JavaScript - 模板字面量
- JavaScript - 標記模板
- 面向物件 JavaScript
- JavaScript - 物件
- JavaScript - 類
- JavaScript - 物件屬性
- JavaScript - 物件方法
- JavaScript - 靜態方法
- JavaScript - 顯示物件
- JavaScript - 物件訪問器
- JavaScript - 物件建構函式
- JavaScript - 原生原型
- JavaScript - ES5 物件方法
- JavaScript - 封裝
- JavaScript - 繼承
- JavaScript - 抽象
- JavaScript - 多型
- JavaScript - 解構賦值
- JavaScript - 物件解構
- JavaScript - 陣列解構
- JavaScript - 巢狀解構
- JavaScript - 可選鏈
- JavaScript - 全域性物件
- JavaScript - Mixins
- JavaScript - 代理
- JavaScript 版本
- JavaScript - 歷史
- JavaScript - 版本
- JavaScript - ES5
- JavaScript - ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 非同步
- JavaScript - 非同步
- JavaScript - 回撥函式
- JavaScript - Promise
- JavaScript - Async/Await
- JavaScript - 微任務
- JavaScript - Promise 化
- JavaScript - Promise 鏈式呼叫
- JavaScript - 定時事件
- JavaScript - setTimeout()
- JavaScript - setInterval()
- JavaScript Cookie
- JavaScript - Cookie
- JavaScript - Cookie 屬性
- JavaScript - 刪除 Cookie
- JavaScript 瀏覽器 BOM
- JavaScript - 瀏覽器物件模型
- JavaScript - Window 物件
- JavaScript - Document 物件
- JavaScript - Screen 物件
- JavaScript - History 物件
- JavaScript - Navigator 物件
- JavaScript - Location 物件
- JavaScript - Console 物件
- JavaScript Web API
- JavaScript - Web API
- JavaScript - History API
- JavaScript - Storage API
- JavaScript - Forms API
- JavaScript - Worker API
- JavaScript - Fetch API
- JavaScript - Geolocation API
- JavaScript 事件
- JavaScript - 事件
- JavaScript - DOM 事件
- JavaScript - addEventListener()
- JavaScript - 滑鼠事件
- JavaScript - 鍵盤事件
- JavaScript - 表單事件
- JavaScript - Window/Document 事件
- JavaScript - 事件委託
- JavaScript - 事件冒泡
- JavaScript - 事件捕獲
- JavaScript - 自定義事件
- JavaScript 錯誤處理
- JavaScript - 錯誤處理
- JavaScript - try...catch
- JavaScript - 除錯
- JavaScript - 自定義錯誤
- JavaScript - 擴充套件錯誤
- JavaScript 重要關鍵字
- JavaScript - this 關鍵字
- JavaScript - void 關鍵字
- JavaScript - new 關鍵字
- JavaScript - var 關鍵字
- JavaScript HTML DOM
- JavaScript - HTML DOM
- JavaScript - DOM 方法和屬性
- JavaScript - DOM 文件
- JavaScript - DOM 元素
- JavaScript - DOM 屬性 (Attr)
- JavaScript - DOM 表單
- JavaScript - 更改 HTML
- JavaScript - 更改 CSS
- JavaScript - DOM 動畫
- JavaScript - DOM 導航
- JavaScript - DOM 集合
- JavaScript - DOM NodeList
- JavaScript - DOM DOMTokenList
- JavaScript 雜項
- JavaScript - Ajax
- JavaScript - 非同步迭代
- JavaScript - Atomics 物件
- JavaScript - Rest 引數
- JavaScript - 頁面重定向
- JavaScript - 對話方塊
- JavaScript - 頁面列印
- JavaScript - 驗證
- JavaScript - 動畫
- JavaScript - 多媒體
- JavaScript - 影像地圖
- JavaScript - 瀏覽器
- JavaScript - JSON
- JavaScript - 多行字串
- JavaScript - 日期格式
- JavaScript - 獲取日期方法
- JavaScript - 設定日期方法
- JavaScript - 模組
- JavaScript - 動態匯入
- JavaScript - BigInt
- JavaScript - Blob
- JavaScript - Unicode
- JavaScript - 淺複製
- JavaScript - 呼叫棧
- JavaScript - 引用型別
- JavaScript - IndexedDB
- JavaScript - 點選劫持攻擊
- JavaScript - 柯里化
- JavaScript - 圖形
- JavaScript - Canvas
- JavaScript - 防抖
- JavaScript - 效能
- JavaScript - 樣式指南
JavaScript - DOM 導航
在 JavaScript 中,使用HTML DOM,我們可以利用節點之間的關係來導航樹節點。每個 HTML 元素在DOM 樹中都表示為一個節點。HTML 文件物件表示為根節點。節點有不同型別,例如根節點、父節點、子節點和兄弟節點。這些節點之間的關係有助於導航 DOM 樹。
什麼是 DOM 節點?
當網頁在瀏覽器中載入時,它會建立一個文件物件。'document' 物件是網頁的根,您可以訪問網頁的其他 HTML 節點。
在 HTML DOM 中,一切都是節點。
“document” 是每個節點的父節點。
每個 HTML 元素都是一個節點。
HTML 元素內的文字是一個節點。
HTML 內的所有註釋都是節點。
您可以訪問 HTML DOM 的所有節點。
HTML DOM 節點之間的關係
在 HTML DOM 中,每個節點與其他節點都有關係。每個節點都存在於 DOM 樹的分層結構中。
以下是我們將在本章中使用的術語。
根節點 - 文件節點是根節點。
父節點 - 每個節點都有一個父節點。根節點沒有任何父節點。
子節點 - 每個節點可以有多個和巢狀的子節點。
兄弟節點 - 兄弟節點位於同一級別,具有相同的父節點。
讓我們在下面的示例中瞭解節點之間的關係。
示例
<html> <head> <title> JavaScrip - DOM Navigation </title> </head> <body> <div> <h3> Hi Users! </h3> <p> Hello World! </p> </div> </body> </html>
在上面的程式中,
<html> 是根節點,它沒有父節點。
<html> 節點包含兩個子元素:<body> 和 <head>。
<head> 元素包含單個子元素:<title>。
<title> 節點包含單個 <text> 節點。
<body> 元素包含單個子節點:<div>。
<div> 節點包含兩個子節點:<h2> 和 <p>。
<h2> 和 <p> 是兄弟節點。
<h2> 和 <p> 的父節點是 <div> 節點。
<div> 節點的父節點是 <body> 節點。
使用 JavaScript 在節點之間導航
在節點之間導航意味著在 DOM 樹中查詢特定元素的父元素、子元素、兄弟元素等。
您可以使用以下方法和屬性在 DOM 樹中導航節點。
屬性 | 描述 |
---|---|
firstChild | 獲取特定節點的第一個子節點。它還可以返回文字、註釋等。 |
firstElementChild | 獲取第一個子元素。例如,<p>、<div>、<img> 等。 |
lastChild | 獲取特定節點的最後一個子節點。它還可以返回文字、註釋等。 |
lastElementChild | 獲取最後一個子元素。 |
childNodes | 獲取特定元素所有子節點的節點列表。 |
children | 獲取特定元素所有子元素的 HTML 集合。 |
parentNode | 獲取 HTML 元素的父節點。 |
parentElement | 獲取 HTML 元素的父元素節點。 |
nextSibling | 獲取同一級別具有相同父節點的下一個節點。 |
nextElementSibling | 獲取同一級別具有相同父節點的下一個元素節點。 |
previousSibling | 獲取同一級別具有相同父節點的上一個節點。 |
previousElementSibling | 獲取同一級別具有相同父節點的上一個元素節點。 |
下面,我們將使用每種方法遍歷 DOM 元素。
訪問第一個子元素
您可以使用 firstChild 或 firstElementChild 屬性訪問特定子元素。
語法
請遵循以下語法使用“firstChild”和“firstElementChild”屬性訪問第一個子元素。
element.firstChild; element.firstChildElement;
示例
在下面的程式碼中,<div>元素包含文字,後面跟著三個<p>元素。
當我們使用“firstChild”屬性時,它返回包含“Numbers”文字的文字節點,而當我們使用“firstChildElement”屬性時,它返回第一個
元素。
<!DOCTYPE html> <html> <body> <div id = "num">Numbers <p> One </p> <p> Two </p> <p> Three </p> </div> <div id = "demo"> </div> <script> const output = document.getElementById('demo'); const numbers = document.getElementById('num'); // Using the firstChild property output.innerHTML += "numbers.firstChild: " + numbers.firstChild.textContent.trim() + "<br>"; // Using the firstElementChild property output.innerHTML += "numbers.firstElementChild: " + numbers.firstElementChild.textContent + "<br>"; </script> </body> </html>
訪問最後一個子元素
您可以使用lastChild或lastChildElement屬性訪問特定HTML節點的最後一個子節點。
語法
請遵循以下語法使用“lastChild”和“laststElementChild”屬性訪問最後一個子元素。
element.lastChild; element.lastChildElement;
示例
在下面的程式碼中,我們定義了包含3個<p>元素的<div>元素,這些<p>元素包含程式語言的名稱。
在輸出中,您可以看到lastElementChild屬性返回最後一個<p>元素,而lastChild屬性返回div元素的文字節點。
<!DOCTYPE html> <html> <body> <div id = "lang"> <p> Java </p> <p> JavaScript </p> <p> HTML </p> Programming Languages </div> <div id = "demo"> </div> <script> const output = document.getElementById('demo'); const langs = document.getElementById('lang'); // Using the lastChild property output.innerHTML += "langs.lastChild: " + langs.lastChild.textContent.trim() + "<br>"; // Using the lastElementChild property output.innerHTML += "langs.lastElementChild: " + langs.lastElementChild.textContent + "<br>"; </script> </body> </html>
訪問HTML元素的所有子節點
您可以使用childNodes屬性訪問所有子元素的節點列表,或使用children屬性訪問所有子元素的HTML集合。
語法
請遵循以下語法訪問DOM元素的所有子元素。
element.children; element.childNodes;
示例
在下面的程式碼中,我們使用childNodes屬性訪問<div>元素的所有子節點。
在輸出中,您可以看到它還返回了文字節點,其中包含未定義的文字,因為它包含每個HTML元素節點前後都有文字節點。
<!DOCTYPE html> <html> <body> <div id = "lang"> <p> Java </p> <p> JavaScript </p> <p> HTML </p> programming Languages </div> <div id = "output"> </div> <script> let output = document.getElementById('output'); let langs = document.getElementById('lang'); output.innerHTML += "All children of the div element are - " + "<br>"; let allChild = langs.childNodes; for (let i = 0; i < allChild.length; i++) { output.innerHTML += allChild[i].nodeName + " " + allChild[i].innerHTML + "<br>"; } </script> </body> </html>
訪問HTML元素的父節點
您可以使用parentNode屬性訪問特定HTML節點的父節點。
語法
請遵循以下語法使用parentNode屬性。
element.parentNode;
示例
在下面的程式碼中,我們使用JavaScript訪問具有d等於'blue'的<li>元素。然後,我們使用parentNode屬性訪問父節點。
它返回“UL”節點,我們可以在輸出中觀察到。
<!DOCTYPE html> <html> <body> <ul id = "color"> <li id = "blue"> Blue </li> <li> Pink </li> <li> Red </li> </ul> <div id = "output">The child node of the color list is: </div> <script> const blue = document.getElementById('blue'); document.getElementById('output').innerHTML += blue.parentNode.nodeName; </script> </body> </html>
訪問下一個兄弟節點
nextSibling屬性用於訪問下一個兄弟節點。
語法
請遵循以下語法使用nextSibling屬性。
element.nextSibling
示例
在下面的程式碼中,我們訪問了id等於'apple'的<li>元素,並使用nextSibling屬性訪問了下一個兄弟節點。它返回id等於'banana'的<li>節點。
<!DOCTYPE html> <html> <body> <ul id = "fruit"> <li id = "apple"> Apple </li> <li id = "banana"> Banana </li> <li id = "watermealon"> Watermealon </li> </ul> <div id = "output">The next sibling node of the apple node is: </div> <script> const apple = document.getElementById('apple'); document.getElementById('output').innerHTML += apple.nextElementSibling.textContent; </script> </body> </html>
訪問上一個兄弟節點
previousSibling屬性用於從DOM樹中訪問上一個兄弟節點。
語法
請遵循以下語法使用previousSibling屬性。
element.previousSibling;
示例
在下面的程式碼中,我們訪問了id等於'banana'的<li>元素的上一個兄弟節點。它返回id等於'apple'的<li>元素。
<!DOCTYPE html> <html> <body> <ul id = "fruit"> <li id = "apple"> Apple </li> <li id = "banana"> Banana </li> <li id = "watermealon"> Watermealon </li> </ul> <div id = "output">The previous sibling node of the banana node is: </div> <script> const banana = document.getElementById('banana'); document.getElementById('output').innerHTML += banana.previousElementSibling.textContent; </script> </body> </html>
DOM根節點
HTML DOM包含兩個根節點。
document.body − 它返回文件的<body>元素。
document.documentElement − 它返回整個HTML文件。
示例:使用document.body
<!DOCTYPE html> <html> <body> <div> This is demo! </div> <div id="output"> </div> <script> const output = document.getElementById('output'); output.innerHTML += "The body of the document is: " + document.body.innerHTML; </script> </body> </html>
示例:使用document.documentElement
<!DOCTYPE html> <html> <body> <h1> Hi, Users! </h1> <div id="output"> </div> <script> const output = document.getElementById('output'); output.innerHTML += "The full document is " + document.documentElement.innerHTML; </script> </body> </html>
DOM nodeName屬性
HTML DOM元素的nodeName屬性用於獲取節點的名稱,它具有以下規範。
它是隻讀的。您不能修改它。
nodeName屬性的值等於大寫的標籤名稱。
文字節點的節點名稱為#text。
文件節點的節點名稱為#document。
語法
請遵循以下語法使用nodeName屬性獲取節點的名稱。
element.nodeName;
示例
在下面的程式碼中,我們訪問<div>元素並使用nodeName屬性。它以大寫形式返回標籤名稱。
<!DOCTYPE html> <html> <body> <div id = "output"> </div> <script> const output = document.getElementById('output'); output.innerHTML = "The node name of the div node is: " + output.nodeName; </script> </body> </html>
DOM nodeValue屬性
nodeValue用於獲取的值,它具有以下規範。
它也是一個只讀屬性。
文字節點的節點值為文字本身。
元素節點的節點值為null。
語法
請遵循以下語法使用nodeValue屬性獲取節點的值。
element.nodeValue;
示例
在下面的程式碼中,<div>元素包含一些文字,<p>元素。
<div>元素的第一個子元素是文字節點,<div>元素的第二個子節點是<p>元素。
在輸出中,您可以看到當您將nodeValue屬性與文字節點一起使用時,它會返回文字。否則,當您將其與HTML元素節點一起使用時,它會返回null。
<!DOCTYPE html> <html> <body> <div id = "num"> Numbers <p> One </p> </div> <div id = "output"> </div> <script> const output = document.getElementById('output'); const num = document.getElementById('num'); let child = num.childNodes; output.innerHTML += "The value of the first child is: " + child[0].nodeValue + "<br>"; output.innerHTML += "The value of the second child is: " + child[1].nodeValue + "<br>"; </script> </body> </html>
DOM中的節點型別
在這裡,我們給出了HTML DOM中不同的節點型別。
節點 | 型別 | 描述 |
---|---|---|
元素節點 | 1 | 元素節點可以具有子節點、屬性和文字內容。例如,<div>、<a>等是元素節點。 |
文字節點 | 3 | 文字節點可以在節點內部包含文字內容。例如,<p>、<div>等元素內部的文字。 |
註釋節點 | 8 | 註釋節點包含註釋。 |
文件節點 | 9 | 它表示整個文件。 |
文件型別節點 | 10 | 它表示文件的型別。例如,<!Doctype html> |
DOM nodeType屬性
nodeType屬性返回節點的型別,如上表所示。
語法
請遵循以下語法使用nodeType屬性獲取節點的型別。
element.nodeType;
示例
在下面的程式碼中,我們使用nodeType屬性獲取節點的型別。
<!DOCTYPE html> <html> <body> <div id = "output"> </div> <script> const output = document.getElementById('output'); output.innerHTML += "The type of the div node is: " + output.nodeType; </script> </body> </html>