JS 筆記系列 03_活用 JavaScript DOM:網頁互動的關鍵

更新於 發佈於 閱讀時間約 7 分鐘

這篇開始進到跟網頁互動較密切相關的單元,我會學習DOM 跟常用的網頁設計指令。練的環境是 VS code (這篇文章寫如何安裝),之前的環境是Colab,但Colab比較適合Python。

DOM(Document Object Model),文件物件模型

DOM 是瀏覽器幫你把 網頁HTML 變成 JavaScript 能操作的物件。簡單來說,它把網頁想像成一棵「樹」,每個元素(像標題、段落、圖片、按鈕等)都是樹上的一個「節點」(node)。瀏覽器會把 HTML 轉成這種樹狀結構,讓程式(比如 JavaScript)可以輕鬆找到、修改或刪除網頁上的東西。

用 HTML 寫的 <div><p>,JS 會變成類似這種結構。假設你把一個網頁想像成一個學校的組織圖:

  • 整棵樹:整個網頁就像學校的組織圖,包含所有的人和部門。
  • 節點:每個「人」或「部門」就是網頁裡的一個元素。例如:
    • <html> 是校長,掌管一切。
    • <body> 是教務處,負責主要內容。
    • <h1> 是班級名稱,像是「3年17班」。
    • <p> 是班上的一個學生,像是「一段文字」。
    • <img> 是學校的宣傳照片。
  • 操作:用 JavaScript 就像是學校的秘書,可以去改組織圖。比如:
    • 想把班級名稱從「3年17班」改成「1年18班」?用 JavaScript 找到 <h1> 節點,改它的內容。
    • 想加一個新學生(一段文字)?可以在 <body> 裡新增一個 <p> 節點。
    • 想把照片換掉?找到 <img> 節點,換成另一張圖的網址。

舉例來說,最原始的網頁長這樣:

<html>
<body>
<h1>歡迎來到我的網站</h1>
<p>這是我的第一段文字</p>
<button>點我</button>
</body>
</html>

我想要用 DOM 讓他活起來,可以動態改變內容,比如:

  • 點擊按鈕後顯示新訊息。
  • 根據使用者輸入改變網頁樣子。
  • 動態載入圖片或資料。

就會使用 document. 的函式包。例如:

// 找到 <h1> 並改文字
document.querySelector("h1").textContent = "改成新標題!";

// 點擊按鈕時,新增一段文字
document.querySelector("button").addEventListener("click", function() {
let newP = document.createElement("p");
newP.textContent = "新加的文字!";
document.body.appendChild(newP);
});

突然多了好多花花的指令,我們來看幾個常見的。


一... 就... addEventListener

給某個元素「掛上一個監聽器」,當某個事件發生時就執行你指定的函式(callback function),通常是使用者點擊按鈕網頁會出現其他互動。我自己的解讀是「一...就...」的文法。

語法說明:

element.addEventListener("事件名稱", callback函式);

  • "click":點擊
  • "mouseover":滑鼠經過
  • "keydown":鍵盤按下
  • "submit":表單送出
  • "change":輸入框內容變動

實驗的檔案請看「這篇文章」

<button id="clickMe">點我!</button>
const btn = document.getElementById("clickMe");

btn.addEventListener("click", function () {
alert("你點到我啦!");
});

常見的「選取方法」怎麼用?實務上用在哪裡?

querySelector / querySelectorAll 在實務上很常用。

購物車功能:

  • getElementById("cart-count")
    → 顯示購物車有幾項商品。他的語法是 getElementById("一個ID")

🤔一定要用ID嗎?不能直接去取得變數嗎?

因為 JavaScript 是獨立執行在瀏覽器上的語言,它不會一開始就知道 HTML 裡有哪些元素,我們要自己用程式把它們「找出來」,這個找的動作就是:

const btn = document.getElementById("clickMe");

如果直接在 JS 寫

clickMe.addEventListener(...) // ❌ 這樣瀏覽器根本不知道 clickMe 是哪來的

優點是

  • 可讀性好btn.addEventListener()document.getElementById("clickMe").addEventListener()更短、更易懂
  • 可重複使用:可以多次用 btn不用每次都重找那個元素
  • 效能較好:只找一次元素、存在變數裡,比每次操作都重新找快很多(雖然在小網頁上差異不大,但在大型專案很重要)
小總結:「抓元素→存變數→加事件」
  • querySelectorAll(".add-to-cart")
    → 選取所有「加入購物車」按鈕,幫它們加監聽器(addEventListener
  • querySelector(".product-price")
    → 即時抓取每個商品的價格,加總到總額上

✅ 表單驗證:

  • getElementById("email")
    → 抓到 email 欄位,輸入錯誤時改變邊框顏色、提示訊息
  • form.addEventListener("submit", e => { ... })
    → 攔截使用者送出前先檢查內容,避免送出不完整的資料

🎨 動態 UI (使用者介面) 改變:

  • 點選不同主題按鈕,透過 querySelectorAll(".theme-btn") 一次掛事件
  • 換背景色、字型大小(透過 .style 或加 class)

以上就是簡單的分享,英文的學習資源還在整理中,可能要800年才會好吧哈哈哈。

使用 VS Code 和 Live Server 建立簡單網頁的教學

至於 event bubbling, event delegation, stopPropagation 我會另外再寫筆記3.5 篇練習~





留言
avatar-img
留言分享你的想法!
avatar-img
越南放大鏡 X 下班資工系
14會員
64內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
2025/06/24
這篇文章提供一個逐步教學,教你如何使用 VS Code 和 Live Server 外掛建立一個簡單的網頁,並搭配 JavaScript 程式碼呈現互動效果。教學包含建立檔案、撰寫 HTML 和 JavaScript 程式碼,以及使用 Live Server 預覽網頁的步驟。
Thumbnail
2025/06/24
這篇文章提供一個逐步教學,教你如何使用 VS Code 和 Live Server 外掛建立一個簡單的網頁,並搭配 JavaScript 程式碼呈現互動效果。教學包含建立檔案、撰寫 HTML 和 JavaScript 程式碼,以及使用 Live Server 預覽網頁的步驟。
Thumbnail
2025/06/23
終於慢慢撿回JS的手感了!這篇文章深入淺出地解釋函式宣告、函式表達式、回呼函式,並搭配範例講解創作階段和執行階段。從Hoisting、匿名函式到非同步操作,助你釐清JS函式運作的關鍵概念。文末還有小測驗,幫助你融會貫通!
Thumbnail
2025/06/23
終於慢慢撿回JS的手感了!這篇文章深入淺出地解釋函式宣告、函式表達式、回呼函式,並搭配範例講解創作階段和執行階段。從Hoisting、匿名函式到非同步操作,助你釐清JS函式運作的關鍵概念。文末還有小測驗,幫助你融會貫通!
Thumbnail
2025/05/23
這篇文章提供 JavaScript 的基礎教學,涵蓋變數、作用域、資料型別、以及常見的錯誤與陷阱。以淺顯易懂的白話文搭配程式碼範例,幫助讀者快速掌握 JavaScript 的核心概念。
Thumbnail
2025/05/23
這篇文章提供 JavaScript 的基礎教學,涵蓋變數、作用域、資料型別、以及常見的錯誤與陷阱。以淺顯易懂的白話文搭配程式碼範例,幫助讀者快速掌握 JavaScript 的核心概念。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
Thumbnail
本文介紹瞭如何寫 HTML 標籤,製作一個簡單的自我介紹網頁。透過介紹寫標籤的實例,讓讀者能夠更瞭解如何在 HTML 中使用不同的標籤。
Thumbnail
本文介紹瞭如何寫 HTML 標籤,製作一個簡單的自我介紹網頁。透過介紹寫標籤的實例,讓讀者能夠更瞭解如何在 HTML 中使用不同的標籤。
Thumbnail
HTML 標籤是網頁內容的基礎,透過學習不同的標籤,你可以設計出各式各樣的內容。本文介紹了各種基本的標籤,如標題、段落、修飾樣式、超連結以及區塊等,讓你對 HTML 標籤有更深入的瞭解。
Thumbnail
HTML 標籤是網頁內容的基礎,透過學習不同的標籤,你可以設計出各式各樣的內容。本文介紹了各種基本的標籤,如標題、段落、修飾樣式、超連結以及區塊等,讓你對 HTML 標籤有更深入的瞭解。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News