iT邦幫忙

0

跟著AI一起:從零打造一個互動式網站 Day15

  • 分享至 

  • xImage
  •  

DOM 是什麼?

DOM(Document Object Model)是一種把 HTML 文件轉換成「樹狀結構」的模型。
簡單來說,瀏覽器會把你的網頁轉成一顆「樹」,讓 JavaScript 可以存取、修改任何元素。

例如:

<html>
  <body>
    <h1>Hello</h1>
    <p>Sunny 的鐵人賽</p>
  </body>
</html>

瀏覽器會轉成這樣的結構:

document
└── html
└── body
├── h1
└── p

JavaScript 可以透過 DOM API 把 <h1><p> 抓出來、改內容、改樣式。

常見的選取方法

  1. getElementById()

用元素的 id 取得元素。

<h1 id="title">Hello</h1>

<script>
let el = document.getElementById("title");
console.log(el); // <h1 id="title">Hello</h1>
</script>
  1. getElementsByClassName()

抓到的是「類陣列 (HTMLCollection)」。

<p class="note">第一段</p>
<p class="note">第二段</p>

<script>
let notes = document.getElementsByClassName("note");
console.log(notes[0].innerText); // 第一段
</script>
  1. getElementsByTagName()

用標籤名稱選取。

<ul>
  <li>蘋果</li>
  <li>香蕉</li>
</ul>

<script>
let items = document.getElementsByTagName("li");
console.log(items.length); // 2
</script>
  1. querySelector()

抓 第一個符合的元素,用 CSS 選擇器。

<p class="note">第一段</p>
<p class="note">第二段</p>

<script>
let first = document.querySelector(".note");
console.log(first.innerText); // 第一段
</script>
  1. querySelectorAll()

抓 所有符合的元素,回傳 NodeList(可用 forEach)。

<p class="note">第一段</p>
<p class="note">第二段</p>

<script>
let allNotes = document.querySelectorAll(".note");
allNotes.forEach(n => console.log(n.innerText));
// 第一段
// 第二段
</script>

改內容與樣式

選到元素後,可以改文字、HTML、CSS:

<h1 id="title">原本的標題</h1>
<p id="desc">這是說明文字</p>

<script>
let title = document.getElementById("title");
let desc = document.getElementById("desc");

// 改文字
title.innerText = "Sunny 的網站";
desc.textContent = "更新後的說明";

// 改 HTML
desc.innerHTML = "<b>這是粗體說明</b>";

// 改樣式
title.style.color = "red";
title.style.fontSize = "30px";
</script>

🔹小練習

<h1 id="title">原本的標題</h1>
<button id="btn">改標題</button>

<script>
let btn = document.getElementById("btn");
let title = document.getElementById("title");

btn.addEventListener("click", () => {
  title.innerText = "Hello Sunny!";
  title.style.color = "blue";
});
</script>

👉 當按下按鈕,標題文字與顏色會被更新。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言