iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
Modern Web

JavaScript 從零開始系列 第 25

JavaScript 從零開始 - Day25- 認識 DOM 文件物件模型

tree

常常聽到人家講說 DOM 元素,到底是什麼?

DOM 的英文全名是 Document Object Model,中文是「文件物件模型」。

是 HTML、XML 和 SVG 文件的程式介面。它提供了一個文件(樹)的結構化表示法,並定義讓程式可以存取並改變文件架構風格內容的方法。DOM 提供了文件以擁有屬性與函式的節點與物件組成的結構化表示。節點也可以附加事件處理程序,一旦觸發事件就會執行處理程序。 本質上,它將網頁與腳本或程式語言連結在一起。

參考來源:https://developer.mozilla.org/zh-TW/docs/Web/API/Document_Object_Model

另外透過 KURO 老師所寫的重新認識 JavaScript 的文章 一書中解釋 DOM 是滿簡單明瞭的,文中提到:

DOM 是一個將 HTML 文件以樹狀的結構來表示的模型,而組合起來的樹狀圖,我們稱之為「DOM Tree」。

一開始學習 HTML 時,會學習到基本架構如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>document</title>
  </head>

  <body>
    <h1>這是h1</h1>
    <p>這是內容</p>
    <a href="#">這是一個 a 連結</a>
  </body>
</html>

瀏覽器是從上到下一行一行的讀取,DOM tree 就是把所有的節點拆開後,彼此的關係會像一棵樹,故取名之,如下圖:

DOM tree

以 document 為起點,可以延伸出許多的 HTML 標籤,一個節點就是一個標籤,往下又可以再延伸出「本文(text)節點」與「屬性 (Attribute)的節點」。JavaScript 就是透過 DOM 提供的 API 來對 HTML 做存取與操作。

一些節點註記:

  • Element: html, head, body, ul, li...
  • Attribute: a, id, type...
  • text: h1, p, span...
    <以上有誤還請不吝指正。>

DOM API

DOM: JavaScript 用來控制「網頁」的節點與內容的標準,「DOM」有著 W3C 所制定的標準來規範。上方提到的 DOM API 是什麼?

先解釋一下 API,應用程式介面,英文全名是:Application Programming Interface

我個人比較喜歡知道縮寫英文的意思,不然會被英文名詞嚇唬了。超級多英文縮寫名詞啊!

可以透過下方影片了解 API 的概念。


想要透過 DOM API 取得節點,透過 JavaScript 可以這樣寫:

// 根據傳入的值,找到 DOM 中 id 為 'xxx' 的元素。
document.getElementById("xxx");

// 針對給定的 tag 名稱,回傳所有符合條件的 NodeList 物件 [註1]
document.getElementsByTagName("xxx");

// 針對給定的 class 名稱,回傳所有符合條件的 NodeList 物件。
document.getElementsByClassName("xxx");

// 針對給定的 Selector 條件,回傳第一個 或 所有符合條件的 NodeList。
document.querySelector("xxx");
document.querySelectorAll("xxx");

而透過 DOM API 選取出來的節點,我們可以透過操作 textContent 屬性來變更它的文字。

設定一個 HTML 屬性節點為 id,名稱為 greet

<h1 id="greet"></h1>

可以先透過 document.querySelector() 選取方法來取得節點,然後修改 textContent 屬性:

<script>document.querySelector('#greet').textContent = 'Hello World!'</script>

可以看一下 codepen

這樣就可以透過 JavaScript 在網頁上輸出 "Hello World!" 囉!

心得

一開始有學到 getByElementById 來賦予 id 的內容,後面會學習到透過 querySelector 能選擇的屬性更多元! jQuery 的 $ 錢字號概念就是從 DOM API 取得方式來的。

參考文章:https://ithelp.ithome.com.tw/articles/10191666


上一篇
JavaScript - 從零開始 - Day24 -透過 OPEN DATA 取得 JSON 資料
下一篇
JavaScript 從零開始 - Day26- querySelector、setAttribute 用法
系列文
JavaScript 從零開始40
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言