今天寫一些瀏覽器跟 DOM
的東西。
全名是 Document Object Model,是一個用於存取網頁文件的介面,本身不是 JavaScript 的一部分,但因為最常跟網頁互動的工具就是 JavaScript 了,所以在前端時會有種它就是 JavaScirpt 一部分的錯覺。
本身像是一棵樹,在 JavaScript 中的根節點是 window
。
window
物件是瀏覽器中一個非常常見的物件,因為它就是瀏覽器中 JavaScript 的 global
物件。所有你看到的東西大多都跟 window
脫不了關係。
像是 Math
啦,document
啦,Array
啦,又或是你在 top level var 宣告的參數,都會被掛在 window
上。
在函式中建立全域變數的一個方法就是掛在
window
上,但不太建議使用,會有汙染風險。
document
代表了被瀏覽器渲染過的頁面 DOM。
常見的東西:
document.head
是 <head>
document.body
是 <body>
document.cookie
是 cookie
,沒事不要用// 建立一個連結並掛在 body 上
let link = document.createElement("a");
link.href = "https://www.google.com/";
link.innerHTML = "前往 Google";
document.body.appendChild(link);
createElement
用來建立 HTML 元素。
建立後要記得用 appendChild
來掛在 DOM 樹中。
所有 HTML 元素都是,把 document
也想進去。
這裡說一些在 JavaScript 中可以用的函式。
// 將 element 的 id 設為 abc
element.id = "abc";
// 將 element 的 class 加上 a, b, c
element.classList.add("a", "b", "c");
// 將 element 的 class 移去 a, b
element.classList.add("a", "b");
// 切換 element 的 class 移去 a, b, c
element.classList.add("a", "b", "c");
// 確認 element 是否有 c class
element.classList.contains("c");
id
跟 classList
都是在定位 HTML 元素時很好用的工具。
element.innerHTML
可以用來讀取或設定目標元素內的 HTML。element.outerHTML
可以用來讀取目標元素包括自己的 HTML。但是 outerHTML
是唯讀的。
這個東西可以找到符合 selector
的 HTML 元素。
它會回傳第一個符合之元素。
// 找第一個超連結
let firstLink = document.querySelector("a");
這個東西也會找到符合 selector
的 HTML 元素。
而且它會回傳所有符合之元素,放在 HTMLCollection
中。
// 找所有超連結
let links = document.querySelectorAll("a");
links.forEach(...); // 不行
[...links].forEach(...); // 可以
值得注意的是,HTMLCollection
並不是陣列,所以它不能用 forrEach
map
等好用的東西。
不過我們可以用 [...htmlCollection]
把它變成陣列。
這個東西會掛載一個 HTML 元素到執行的元素上。
像上面 document.createElement
的例子。
這個東西會在相對應 event 發生在執行的元素上時執行 callback。
常用的 event 像是 load
click
mousedown/mouseup/mousemove
keydown/keyup/keypress
等等。
在做使用者互動時非常常用到。
以 9/18 12:00 ~ 9/19 12:00 文章觀看數增加值排名
+931
Day 1 無限手套 AWS 版:掌控一切的 5 + 1 雲端必學主題
+901
Day 3 雲端四大平台比較:AWS . GCP . Azure . Alibaba
+766
Day 2 AWS 是什麼?又為何企業這麼需要 AWS 人才?
+737
Day 4 網路寶石:AWS VPC Region/AZ vs VPC/Subnet 關係介紹
+728
Day 7 網路寶石:【Lab】VPC外網 Public Subnet to the Internet (IGW) (上)
+724
Day 5 網路寶石:AWS VPC 架構 Routes & Security (上)
+719
Day 6 網路寶石:AWS VPC 架構 Routes & Security (下)
+711
Day 10 運算寶石:EC2 儲存資源 Instance Store vs Elastic Block Storage (EBS)
+708
Day 9 運算寶石:EC2 重點架構
+704
Day 13 運算寶石:【Lab】EC2儲存資源 EBS Volume 建立與使用 (下)
AWS 系列流量也太高