讀懂既有 jQuery 行為
能把選取、事件、目前項目、class 與 aria 逐行說成畫面責任。
CHAPTER 19 · 120 MINUTES
本章使用課次 19 後 120 分鐘,先操作與讀懂可運作的 jQuery FAQ,再把同一段行為遷移成原生 JavaScript,並以單開、收合與 aria 做回歸。
LEARNING GOALS
能把選取、事件、目前項目、class 與 aria 逐行說成畫面責任。
真正使用 querySelectorAll、addEventListener 與 classList,不是再補一個 jQuery handler。
原生版必須通過單開、再點收合與 aria-expanded 不殘留的回歸。
輸入:第 18 章產物:可開始、暫停、重設且不會重複加速的倒數計時器
本章輸出:能讀懂既有 jQuery FAQ,再將同一段行為遷移成原生 JavaScript,並維持單開、收合與 aria-expanded
產物類型:extension;後續用途:第 20 章
PROBLEM & ANALOGY
維護 jQuery 像閱讀舊版操作手冊:先辨認它把哪些原生步驟縮寫,再在既有系統內做最小修復,不為了練習整站重寫。
本章要解決:本章使用課次 19 後 120 分鐘,沿著舊碼行為閱讀、原生 JavaScript 責任對照、遷移一段 FAQ 功能與回歸驗收前進。
接住上一章:第 15–18 章已掌握原生 JavaScript 的事件、DOM 與狀態。
合回共同作品:本章成果必須回到同一份作品集檢查,不另開一個無關小作品。
SCOPE
讀懂 jQuery 選取與事件寫法;只切換目前 FAQ item 狀態;維持單開模式與 aria-expanded。
能把 $()、.on()、.closest() 對照到 querySelector、addEventListener、closest。
不教新專案導入 jQuery、jQuery 動畫或 AJAX;API 從下一章使用原生 fetch。
本章術語:jQuery、selector、.on()、this、.closest()、toggleClass。遇到英文先回到畫面責任,不要求背拼字。
CORE IDEAS
this 是被點擊按鈕,先 closest 到目前 item,避免全部一起開。DEBUG
課堂刻意錯誤:把事件內目標寫成 $('.faq-item'),點一題全部展開;在 Elements 觀察所有 class 同時變化,再改成 $(this).closest('.faq-item')。
$ is not defined:先檢查 CDN 是否載入及 script 順序;離線時使用教師備援檔。this 找目前 item。固定順序:先重現 → 讀 Console/Styles → 確認檔案與元素 → 一次只修一處 → 重跑原操作。
先查:檢查處理的是被點擊元素,不是全部一起切換。
先查:把視覺 class 與 aria-expanded 放在同一次更新。
先查:確認先關閉其他題,再反向切換目前題。
PRACTICE CONTRACT
檔案:script.js
位置:依任務文字搜尋對應元素或函式
結果:querySelectorAll 與 addEventListener 只切換被點擊的 FAQ
檔案:script.js
位置:依任務文字搜尋對應元素或函式
結果:原生版的視覺開關與 aria-expanded 永遠一致
檔案:script.js
位置:依任務文字搜尋對應元素或函式
結果:開新題會關閉舊題,再點目前題可收合,aria 不殘留
EVIDENCE
舊版用 ______;原生版改用 ______;視覺狀態與 aria-expanded 都由 ______ 同步更新。
移除 jQuery 不是把行為改掉;要以既有功能、單開與可及性回歸驗收。
提交舊 jQuery 責任表、原生遷移差異,並現場通過「開第一題→開第二題→再點第二題收合」。
下一章:第 20 章回到原生 JavaScript,處理 API、JSON 與非同步狀態。