※ 認識DOM(三)

閱讀時間約 6 分鐘

※ 查找 DOM 元素有兩種途徑:

  • 直接選出一個節點 (select):要在樹狀結構裡查找資料,至少要先選出第一個元素。
  • 從一個特定節點,查找到週邊的節點 :選出一個元素後,就可以順著結構找出父元素、子元素 、甚至同一層的兄弟元素,這種行為稱為「遍歷 (traverse)」。

※ 選出特定 DOM 節點的語法 :

  • querySelector:搭配指定 CSS 選擇器選出一個元素節點,如果有很多個元素,則會直接回傳第一個找到的結果。

語法:element = document.querySelector(selector)

程式碼拆解:

  1. document:在文件裡尋找。
  2. querySelector:選取網頁上的元素。
  3. 參數selector:一個包含一個或多個 CSS 選擇器的字符串。
// 選取第一個 class 為 'example' 的 div 元素
const div = document.querySelector('div.example');

// 選取 id 為 'header' 的元素
const header = document.querySelector('#header');
  • querySelectorAll:搭配指定 CSS 選擇器選出很多元素,回傳一個類似陣列的 NodeList。
  1. 語法:nodeList = document.querySelectorAll(selector)
  2. 參數selector:一個包含一個或多個 CSS 選擇器的字符串。
// 選取所有 class 為 'example' 的 div 元素
const divs = document.querySelectorAll('div.example');

// 選取所有位於列表中的項目元素
const items = document.querySelectorAll('ul > li');


※ 修改 DOM 節點的語法 :

新增節點:

document.createElement(tagName):新增一個元素。

raw-image

用textContent 寫入文字資料:

在JS中宣告一個變數,把變數指向到DOM網頁元素位置去。直接選取變數來更改網頁文字內容、並重新賦予值。

//JS部分
const el = document.querySelector('h1');
el.textContent = "hello world"; //寫法較簡潔

修改元素的內容:

  • NODE.innerHTML = "修改元素的內容" : 會解析 HTML 標籤。
  • NODE.innerText = "修改元素的內容" : 不會解析 HTML 標籤(只處理文字)。
raw-image

將節點插入 DOM Tree:

元素建立之後,在瀏覽器上還看不到,需要透過 appendChild、insertBefore 或 replaceChild 等方法將新元素加入至指定的位置之後才會顯示。常用到的是 appendChild。

語法:NODE.appendChild(Node)

raw-image

刪除節點:

  • parentElement.removeChild(NODE)
  • NODE.remove()

※ DOM 元素可以調整那些內容:

※ 樣式:classList,className和style。

說明:

classList: 這是一個元素的類別屬性的集合,提供了添加、刪除和切換CSS類別的方法。

className: 這是一個表示元素class屬性的字符串。可以直接修改這個屬性來改變元素的類別。

style: 這個屬性允許直接在元素上設定行內樣式。

操作 CSS樣式:

  • NODE.classList : 查看目前所有 class 名稱,會回傳類似陣列的清單。
  • NODE.classList.add(className1, className2) : 加入一個或多個樣式。
  • NODE.classList.remove(className1, className2) : 刪除樣式。
  • NODE.className = className - 如果樣式只有一個,也可以直接寫入。

操作style 屬性:改變的是元素的視覺呈現(即CSS樣式),並不會改變HTML源代碼中的屬性值。

  • NODE.style.backgroundColor
  • NODE.style.borderStyle

※ 屬性:修改的是元素的HTML屬性。

屬性操作:

getAttribute()-得到屬性內容,setAttribute()-新增或修改屬性內容。

※ 內容:innerHTML-取得HTML,innerText-改變裡面的文字內容。

※ Javascript Even機制:

在DORM元素上新增一個監聽器,來偵測使用者的操作行為,接著監聽器收到訊號後會如何執行對應程式

執行程序:

  1. addEventListener:增加一個事件監聽器
  2. callback function
  3. capturing & bubbling

設置事件(Event Handler)

raw-image

設置事件時,需要考慮到幾個基本要件:

  • 觸發事件的 HTML 元素
  • 事件類型,如 click、submit、keyup....
  • 想要觸發的程式,會是一個函式,該函式會稱為事件處理器 (event handler)

事件監聽器(Event Listener)

raw-image
// listener
element.addEventListener('click', greeting)
// handler
function greeting() {
alert('handling event')
}

addEventListener 可以傳入三個參數:

  • 事件名稱 (event name),如 'click'
  • handler,要啟動的 function,也可以直接使用匿名函式
  • useCapture,切換 capturing 機制

常見事件種類:

滑鼠事件(mouse event)

  • click - 滑鼠點擊元素
  • mousemove - 滑鼠滑過元素
  • mouseout - 滑鼠離開元素

鍵盤事件(keyboard event)

  • keydown - 點擊且長按一個鍵時
  • keyup - 放開按鍵時

表單事件

  • submit - 提交表單時
  • focus - 點擊某個輸入框時
  • input - 輸入框內容改變時

other事件

  • 檔案讀取(document 事件)
  • 視窗變化相關的事件resize,scroll,load


    全端網頁開發專業知識分享
    留言0
    查看全部
    發表第一個留言支持創作者!
    ※ Javascript和HTML的關係 當我們輸入新的網址或按下重新整理時,從解析檔案到畫面顯示出來,瀏覽器會進行以下流程: 解析 HTML / CSS 檔案,建立物件模型: HTML → DOM (Document Object Model)。 CSS → CSSOM (CSS Obje
    ※ DOM是什麼? DOM 全名為 Document Object Model 中文翻譯為 文件物件模型,就是把一份 HTML 文件內的各個標籤,包括文字、圖片等等都定義成物件,而這些物件最終會形成一個樹狀結構。 就 Document Object Model 這個名字來說,其中 documen
    ※ 非同步概念總複習 為什麼要使用 Promise? 在 JavaScript 開發中,處理非同步操作是常見需求,涉及如文件讀寫、數據庫查詢或網路請求等耗時任務。傳統的回調方式可能導致代碼結構混亂,稱為「回調地獄」,難以維護和理解。 Promise 是解決這問題的方法。它是一個物件(objec
    認識 async/await基本概念: async 的本質是 promise 的語法糖 ,只要 function 標記為 async,就表示裡頭可以撰寫 await 的同步語法,而 await 顧名思義就是「等待」,它會確保一個 promise 物件都解決 ( resolve ) 或出錯 ( re
    什麼是 Promise.all? 在有多個 Promise 的時候,使用 Promise.all 可以確保「所有的 Promise 都執行完以後,才進入 then」。 Promise.all 語法結構: Promise.all 接受的參數是陣列形式。 什麼時候要使用 Promise.all?
    ※ Promise基本介紹 什麼是 Promise? Promise 是 JavaScript 的一個構造函式,用於創建表示非同步操作的物件實例。使用 new Promise() 時,你會創建一個包含非同步操作的實例,這個實例可以透過其繼承的方法如 then(), catch(), 和 fina
    ※ Javascript和HTML的關係 當我們輸入新的網址或按下重新整理時,從解析檔案到畫面顯示出來,瀏覽器會進行以下流程: 解析 HTML / CSS 檔案,建立物件模型: HTML → DOM (Document Object Model)。 CSS → CSSOM (CSS Obje
    ※ DOM是什麼? DOM 全名為 Document Object Model 中文翻譯為 文件物件模型,就是把一份 HTML 文件內的各個標籤,包括文字、圖片等等都定義成物件,而這些物件最終會形成一個樹狀結構。 就 Document Object Model 這個名字來說,其中 documen
    ※ 非同步概念總複習 為什麼要使用 Promise? 在 JavaScript 開發中,處理非同步操作是常見需求,涉及如文件讀寫、數據庫查詢或網路請求等耗時任務。傳統的回調方式可能導致代碼結構混亂,稱為「回調地獄」,難以維護和理解。 Promise 是解決這問題的方法。它是一個物件(objec
    認識 async/await基本概念: async 的本質是 promise 的語法糖 ,只要 function 標記為 async,就表示裡頭可以撰寫 await 的同步語法,而 await 顧名思義就是「等待」,它會確保一個 promise 物件都解決 ( resolve ) 或出錯 ( re
    什麼是 Promise.all? 在有多個 Promise 的時候,使用 Promise.all 可以確保「所有的 Promise 都執行完以後,才進入 then」。 Promise.all 語法結構: Promise.all 接受的參數是陣列形式。 什麼時候要使用 Promise.all?
    ※ Promise基本介紹 什麼是 Promise? Promise 是 JavaScript 的一個構造函式,用於創建表示非同步操作的物件實例。使用 new Promise() 時,你會創建一個包含非同步操作的實例,這個實例可以透過其繼承的方法如 then(), catch(), 和 fina
    你可能也想看
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    在南管之鄉、在南管世家成長的王心心說,她睜眼、閉眼間,盡是悠悠南管在耳邊響起。
    Thumbnail
    托凱 (Tokaj) 產區位於匈牙利的東北方和斯洛伐克 (Slovakia) 的交界處,喀爾巴阡山脈 (Carpathian Mountains) 的山腳下,是世界最為知名的貴腐甜白酒產區之一,這邊產的葡萄酒稱為托卡伊 (Tokaji)。不過近年來,晚摘酒和不甜的酒款也越來越受到歡迎。
    Thumbnail
    加州大部分的葡萄酒都產自位於內陸的農業經濟重心的中央谷地,土壤肥沃,透過引水灌溉來提高產量。比較優質的葡萄酒則大多來自於加州沿岸,因為受到洋流的影響,氣候比較冷涼,需要花比較多的心思照顧葡萄園。加州主要的葡萄園可以畫分成五個區域,大部分的 AVA 來自於其中的三個區域:北海岸、中部海岸,與中央谷地。
    Thumbnail
    【起司很有事】專題近期開設一的新的欄目:〔起司美味〕這個單元,是介紹一些餐廳起司入菜的菜品,藉由他們創意美味,認識一款起司,大家也可嘗試他們的作品認識一款起司另一種風味。 起司加握壽司等於毛球?這是什麼鬼呀?
    Thumbnail
    最近台灣正值一波「呼吸道融合病毒」的大流行,有不少兩歲以下的孩童感染了呼吸道融合病毒,而染上急性細支氣管炎而必須住院治療,嚴重一點的孩童甚至喘到需要住到加護病房,接受呼吸器的支持。今天要為大家簡介急性細支氣管的症狀、嚴重度的區分及相應的治療方法,並告訴家長如何避免孩童得到急性細支氣管炎......
    Thumbnail
    「Is it just me, or is it getting crazier out there?」—《JOKER》 小丑在笑,不代表開心;莫梭沒哭,不代表無情,但因為不符合社會期待,被視作異類。然而,透過卡繆的筆,我們可以窺探莫梭的內心,得以比較出外在世界多麽荒謬。
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    在南管之鄉、在南管世家成長的王心心說,她睜眼、閉眼間,盡是悠悠南管在耳邊響起。
    Thumbnail
    托凱 (Tokaj) 產區位於匈牙利的東北方和斯洛伐克 (Slovakia) 的交界處,喀爾巴阡山脈 (Carpathian Mountains) 的山腳下,是世界最為知名的貴腐甜白酒產區之一,這邊產的葡萄酒稱為托卡伊 (Tokaji)。不過近年來,晚摘酒和不甜的酒款也越來越受到歡迎。
    Thumbnail
    加州大部分的葡萄酒都產自位於內陸的農業經濟重心的中央谷地,土壤肥沃,透過引水灌溉來提高產量。比較優質的葡萄酒則大多來自於加州沿岸,因為受到洋流的影響,氣候比較冷涼,需要花比較多的心思照顧葡萄園。加州主要的葡萄園可以畫分成五個區域,大部分的 AVA 來自於其中的三個區域:北海岸、中部海岸,與中央谷地。
    Thumbnail
    【起司很有事】專題近期開設一的新的欄目:〔起司美味〕這個單元,是介紹一些餐廳起司入菜的菜品,藉由他們創意美味,認識一款起司,大家也可嘗試他們的作品認識一款起司另一種風味。 起司加握壽司等於毛球?這是什麼鬼呀?
    Thumbnail
    最近台灣正值一波「呼吸道融合病毒」的大流行,有不少兩歲以下的孩童感染了呼吸道融合病毒,而染上急性細支氣管炎而必須住院治療,嚴重一點的孩童甚至喘到需要住到加護病房,接受呼吸器的支持。今天要為大家簡介急性細支氣管的症狀、嚴重度的區分及相應的治療方法,並告訴家長如何避免孩童得到急性細支氣管炎......
    Thumbnail
    「Is it just me, or is it getting crazier out there?」—《JOKER》 小丑在笑,不代表開心;莫梭沒哭,不代表無情,但因為不符合社會期待,被視作異類。然而,透過卡繆的筆,我們可以窺探莫梭的內心,得以比較出外在世界多麽荒謬。