新手常見練習:頁面上有一段文字,提供兩個按鈕(或單一切換按鈕),點擊後在「小字紅色」與「大字藍色」兩種樣式間切換。核心知識點:DOM 選取、事件綁定、Class 切換、CSS 類別定義。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>樣式切換示範</title>
<style>
/* 定義兩組樣式類別 */
.font-small { font-size: 12px; color: red; }
.font-large { font-size: 72px; color: blue; }
/* 預設樣式 */
#demo-text { font-size: 16px; color: #333; }
</style>
</head>
<body>
<button id="btn-toggle">切換樣式</button>
<p id="demo-text">這裡是測試文字。</p>
<script>
// 等待 DOM 就緒
document.addEventListener('DOMContentLoaded', function() {
const btn = document.getElementById('btn-toggle');
const text = document.getElementById('demo-text');
btn.addEventListener('click', function() {
// 判斷目前類別並切換
if (text.classList.contains('font-small')) {
text.classList.replace('font-small', 'font-large');
} else if (text.classList.contains('font-large')) {
text.classList.replace('font-large', 'font-small');
} else {
// 初始狀態無類別,預設套用小字
text.classList.add('font-small');
}
});
});
</script>
</body>
</html>
| 技術 | 說明 |
|---|---|
classList API | 現代標準操作類別的方法:add(), remove(), toggle(), replace(), contains()。比操作 className 字串更安全、語意更清晰。 |
| 事件委派 | 範例直接綁定按鈕,若有大量動態元素可改用 document.body.addEventListener('click', e => { if(e.target.matches('#btn-toggle')) ... })。 |
| CSS 分離 | 樣式定義在 <style> 或外部 CSS,JS 僅負責切換類別,符合「關注點分離」原則。 |
原答案使用 jQuery 舊版寫法 ($(document).ready, attr('class'), 手動字串比對),存在以下問題:
attr('class') 取得的是字串,多類別時比對極易出錯;classList 為陣列化介面,操作更直觀。toggle 或 replace 簡化。localStorage 記住使用者偏好,重新整理保持樣式。這個小練習雖簡單,但涵蓋了前端開發最核心的「狀態驅動視圖」思想:資料(類別)改變 → 瀏覽器自動重繪,是 React/Vue 等現代框架的基礎雛形。