操作 DOM
改文字、切換 class、建立節點,讓畫面在不重整整頁的情況下更新。
如果第 05 章教你 JavaScript 怎麼操作 DOM,第 06 章教你 Web server 怎麼回應請求,第 07 章教你框架為什麼存在, 那這一章就是把這三件事重新串起來:JavaScript 為什麼會一路從前端走到後端?各種 library、toolkit、framework 到底差在哪裡?
很多學生會分段學到 HTML / CSS、DOM、HTTP、Node.js、React 或 Express,但腦中卻沒有一張完整地圖。 結果常常會知道工具名稱,卻不知道它們在同一套 Web 架構中的位置。 這一章的目標,就是把「歷史演進」與「技術分工」一起講清楚。
| 時代 | 主要痛點 | 代表演進 |
|---|---|---|
| 早期瀏覽器腳本 | 只能做簡單互動,功能較零散 | 表單驗證、alert、簡單事件處理 |
| AJAX / jQuery 時代 | DOM 操作繁瑣、跨瀏覽器差異大 | jQuery 讓選取節點、事件、AJAX 更簡單 |
| Node.js 興起 | 前後端語言分離,工具鏈分散 | JavaScript 能在伺服器端執行,形成全端可能 |
| ES6+ 與 npm 生態 | 大型專案需要更好的模組化與重用 | import / export、套件管理、建構工具普及 |
| 框架 / 全端整合 | 大型應用的狀態、路由、部署更複雜 | React / Vue / Next.js / NestJS 等生態成熟 |
改文字、切換 class、建立節點,讓畫面在不重整整頁的情況下更新。
接住 click、input、submit 等事件,決定使用者操作後要做什麼。
透過 fetch()、Axios 等工具向伺服器拿資料,再把結果渲染到頁面上。
這裡先不用急著背工具名稱,而是先用教學上最容易理解的「由外到內」順序來看: Web server → Runtime → Framework → Toolkit → Library。 這樣比較容易把不同名詞放回同一張架構圖裡。
| 層次 | 類型 | 核心概念 | 誰主導流程? | 例子 |
|---|---|---|---|---|
| 入口層 | Web server | 負責接 HTTP request、回應資源或轉送請求 | 入口流程為主,不負責你的應用邏輯結構 | Nginx、Apache、Node 內建 http server |
| 執行層 | Runtime | 讓程式碼真的跑起來的執行環境 | 不負責你的商業邏輯結構 | Node.js、Python、JVM |
| 應用結構層 | Framework | 提供整體結構、生命週期與慣例 | 框架主導較多流程 | Angular、Next.js、NestJS、Django |
| 介面工具層 | Toolkit / UI framework | 提供現成元件、樣式與輕量互動模式 | 多半仍由你控制畫面流程 | Bootstrap、Alpine.js |
| 功能輔助層 | Library | 預先寫好的功能集合 | 通常由你的程式主動呼叫 | jQuery、Axios、Lodash、D3.js |
| 分類 | 代表工具 | 常見用途 |
|---|---|---|
| DOM 操作 / 經典入門 | jQuery | 簡化 DOM 選取、事件與 AJAX |
| HTTP / AJAX | Axios | 呼叫 API、設定攔截器、統一錯誤處理 |
| 資料處理工具庫 | Lodash | 陣列、物件、節流、防抖與資料轉換 |
| 動畫效果 | Anime.js、GSAP | 互動動畫、時間軸、進階動態效果 |
| 資料視覺化 | D3.js、Chart.js | 圖表、儀表板、互動資料展示 |
| 3D / WebGL | Three.js | 3D 場景、模型展示、互動視覺 |
| 輕量互動 | Alpine.js | 在 HTML 中快速加入簡單狀態與互動 |
| UI toolkit / CSS framework | Bootstrap | 快速建立版型、元件與響應式介面 |
適合快速示範、教材實驗與簡單頁面,把套件直接用 <script> 載入。
適合正式專案,能管理版本、依賴與建構流程,例如 npm install axios。
讓程式碼可分檔、重用與維護,是現代 JavaScript 專案的重要基礎。
這個例子把瀏覽器端與伺服器端 JavaScript 串在一起,是最典型的前後端互動模型。
// Browser
async function loadStatus() {
const response = await fetch("/api/status");
const data = await response.json();
document.querySelector("#status").textContent = data.message;
}
loadStatus();
// Express
const express = require("express");
const app = express();
app.get("/api/status", (req, res) => {
res.json({ message: "JavaScript 已串起前端與後端" });
});
app.listen(3000);
JavaScript 已串起前端與後端
| 層次 | 主要責任 | 代表工具 |
|---|---|---|
| Browser | 顯示畫面、接事件、更新 DOM | 原生 JS、React、Vue、Alpine.js |
| HTTP / API | 交換資料格式與狀態碼 | fetch、Axios、HTTP |
| Runtime | 執行伺服器端 JavaScript | Node.js |
| Backend Framework | 管理路由、驗證、模組、商業邏輯 | Express、NestJS |
先會 HTML、CSS、DOM、事件與 fetch(),才能知道套件幫你省了什麼。
根據需求選擇 jQuery、Axios、Chart.js、Bootstrap 等工具,不要一次全背。
當畫面、路由、模組與團隊協作需求變大,再進入 React / Next.js / NestJS 等生態。