#5 JavaScript in Browser

今天写一些浏览器跟 DOM 的东西。

DOM

全名是 Document Object Model,是一个用於存取网页文件的介面,本身不是 JavaScript 的一部分,但因为最常跟网页互动的工具就是 JavaScript 了,所以在前端时会有种它就是 JavaScirpt 一部分的错觉。

本身像是一棵树,在 JavaScript 中的根节点是 window

window

window 物件是浏览器中一个非常常见的物件,因为它就是浏览器中 JavaScript 的 global 物件。所有你看到的东西大多都跟 window 脱不了关系。

像是 Math 啦,document 啦,Array 啦,又或是你在 top level var 宣告的参数,都会被挂在 window 上。

在函式中建立全域变数的一个方法就是挂在 window 上,但不太建议使用,会有污染风险。

document

document 代表了被浏览器渲染过的页面 DOM。

常见的东西:

  • document.head<head>
  • document.body<body>
  • document.cookiecookie,没事不要用

createElement(type)

// 建立一个连结并挂在 body 上
let link = document.createElement("a");
link.href = "https://www.google.com/";
link.innerHTML = "前往 Google";
document.body.appendChild(link);

createElement 用来建立 HTML 元素。
建立後要记得用 appendChild 来挂在 DOM 树中。

Element

所有 HTML 元素都是,把 document 也想进去。
这里说一些在 JavaScript 中可以用的函式。

id & classList

// 将 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");

idclassList 都是在定位 HTML 元素时很好用的工具。

innerHTML / outerHTML

element.innerHTML 可以用来读取或设定目标元素内的 HTML。
element.outerHTML 可以用来读取目标元素包括自己的 HTML。但是 outerHTML 是唯读的。

querySelector(selector)

这个东西可以找到符合 selector 的 HTML 元素。
它会回传第一个符合之元素。

// 找第一个超连结
let firstLink = document.querySelector("a");

querySelectorAll(selector)

这个东西也会找到符合 selector 的 HTML 元素。
而且它会回传所有符合之元素,放在 HTMLCollection 中。

// 找所有超连结
let links = document.querySelectorAll("a");

links.forEach(...); // 不行
[...links].forEach(...); // 可以

值得注意的是,HTMLCollection 并不是阵列,所以它不能用 forrEach map 等好用的东西。
不过我们可以用 [...htmlCollection] 把它变成阵列。

appendChild(element)

这个东西会挂载一个 HTML 元素到执行的元素上。
像上面 document.createElement 的例子。

addEventListener(event, callback)

这个东西会在相对应 event 发生在执行的元素上时执行 callback。

常用的 event 像是 load click mousedown/mouseup/mousemove keydown/keyup/keypress 等等。

在做使用者互动时非常常用到。


每日铁人赛热门 Top 10 (0918)

以 9/18 12:00 ~ 9/19 12:00 文章观看数增加值排名

  1. +931 Day 1 无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  2. +901 Day 3 云端四大平台比较:AWS . GCP . Azure . Alibaba
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  3. +766 Day 2 AWS 是什麽?又为何企业这麽需要 AWS 人才?
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  4. +737 Day 4 网路宝石:AWS VPC Region/AZ vs VPC/Subnet 关系介绍
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  5. +728 Day 7 网路宝石:【Lab】VPC外网 Public Subnet to the Internet (IGW) (上)
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  6. +724 Day 5 网路宝石:AWS VPC 架构 Routes & Security (上)
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  7. +719 Day 6 网路宝石:AWS VPC 架构 Routes & Security (下)
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  8. +711 Day 10 运算宝石:EC2 储存资源 Instance Store vs Elastic Block Storage (EBS)
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  9. +708 Day 9 运算宝石:EC2 重点架构
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  10. +704 Day 13 运算宝石:【Lab】EC2储存资源 EBS Volume 建立与使用 (下)
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题

AWS 系列流量也太高


<<:  基本操作 - 登入,取得市场清单

>>:  Day5:今天我们来介绍一下Microsoft Defender for Endpoint

Day 19 ( 中级 ) 阵列点灯 ( 动画 )

阵列点灯 ( 动画 ) 教学原文参考:阵列点灯 ( 动画 ) 这篇文章延续「阵列点灯 ( 显示图形 ...

33岁转职者的前端笔记-DAY 22 成绩计算机练习笔记

流程 1.先观察画面,哪些值需要抓 2.抓HTML的值: a.先宣告变数,变数就是抓HTML的值,也...

[Lesson21] Kotlin - 宣告变数

Kotlin 的基本资料型态与 Java 相同,包括:Byte、Short、Int、Long、Flo...

Day 15 CSS isolation

CSS isolation 介绍 有时候会想对不同 Component 做个别样式设定,但如果把 c...

铁人赛 Day5 -- 一定要知道的 CSS (二) - display属性的应用

前言 不罗嗦,一样先附上程序码 <!DOCTYPE html> <html lan...