第 09 堂|讓作品可以搜尋與分類

先認識一筆資料,親手新增第七件作品,再把搜尋與分類接在同一條流程。

3 小時 · 六個步驟 · 54 分鐘觀念+126 分鐘實作

自己已勾選 0/6 步
步驟 1/6 · 觀念 18 分鐘

一筆資料,不是一整段HTML

辨認陣列、物件與唯一id,知道畫面由哪裡產生。

先準備

  • 自己正常portfolio的index.html、works.html、services.html、完整styles.css
  • 本機圖片、既有六筆資料;變更前副本與自己的Git基準

原本六張卡片直接寫在HTML;這次把內容整理成資料,由同一個render產生DOM。新增作品只加物件,不再到HTML複製整張卡片。

{ id:"photo-03", title:"雨後街角", category:"攝影",
  image:"assets/work-layout.jpg", alt:"教學示意", summary:"虛構練習" }

跟著觀察

  1. 指出一筆作品的id、title與category。
  2. 找出哪些內容屬資料、哪些屬共用卡片版型。
  3. 說明為什麼id不能用篩選後的顯示位置。

做完,自己確認

  • 辨認陣列、物件與唯一id,知道畫面由哪裡產生。
  • 能指出指定檔案與作用範圍。
接著進行第 2 步
步驟 2/6 · 實作 42 分鐘

把卡片搬進資料

讀懂資料,親手新增第七件作品。

先準備

  • 自己正常portfolio的index.html、works.html、services.html、完整styles.css
  • 本機圖片、既有六筆資料;變更前副本與自己的Git基準

先用生成Prompt轉移既有六筆資料;再親手新增指南提供的photo-03,只增加資料,儲存重新整理核對七筆。

跟著做

  1. 備份並附完整HTML、CSS與六筆內容,讓AI建立projects.js渲染。
  2. 親手新增第七筆photo-03,核對唯一id與本機圖片。
  3. 重新整理比對七筆資料與卡片;原靜態列表不能重複留著。

用作品資料產生卡片

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己正常portfolio的index.html、works.html、services.html、完整styles.css
  • 本機圖片、既有六筆資料;變更前副本與自己的Git基準
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 只搬原六筆到projects.js,安全DOM渲染,原資料與版型保留。
  • 指出新增第七筆位置,學生手動後才驗收七筆。
4.自己檢查結果
  • 新增photo-03後七筆、id不重複、沒有雙份卡片。
  • 圖片、摘要、原角色與服務入口完整。
用作品資料產生卡片 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:承接第8堂六張靜態作品、APPA、原紫綠tokens、4:3圖片框與600/1024斷點。將六筆資料移入projects.js,欄位為唯一id、title、category、image、alt、summary、width、height及首筆reference。分類品牌兩筆、網站兩筆、攝影兩筆,晨光工作室網站屬網站。學生另加photo-03雨後街角,沿用work-layout.jpg且如實標為示意;不新增後端。

本次任務:將works.html既有六筆作品移到本機projects.js陣列,每筆包含唯一id、title、category(品牌/網站/攝影)、image、alt、summary、width、height,首筆保留reference長網址。順序依附檔,品牌2、網站2、攝影2,晨光工作室網站屬網站。render以createElement與textContent產生原.work-card結構、角色段與services.html連結,圖片及4:3 contain保留;HTML不重複靜態卡片。保留APPA、原網格及其他頁。這次先不加搜尋/分類,顯示目前筆數。解釋陣列、物件、DOM與render;提供我親手新增photo-03的插入位置,不替我虛構新增成功。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 新增photo-03後七筆、id不重複、沒有雙份卡片。
  • 圖片、摘要、原角色與服務入口完整。
接著進行第 3 步
步驟 3/6 · 觀念 18 分鐘

事件、篩選與重新顯示

理解搜尋與分類需要同時符合。

先準備

  • 自己正常portfolio的index.html、works.html、services.html、完整styles.css
  • 本機圖片、既有六筆資料;變更前副本與自己的Git基準
  • 七筆資料的projects.js與自己的四組預期表

輸入與點按只更新條件,filter從七筆資料找交集,再由render更新畫面。切分類不能偷偷清關鍵字;零筆時也必須清掉舊卡片。

const matched = categoryMatch && titleMatch;
// 網站+晨光:1筆;攝影+晨光:0筆

跟著觀察

  1. 用一筆晨光作品說明兩條件是否都符合。
  2. 比較全部空查詢與攝影+晨光。
  3. 指出筆數、選取狀態與卡片應一起更新。

做完,自己確認

  • 理解搜尋與分類需要同時符合。
  • 能指出指定檔案與作用範圍。
接著進行第 4 步
步驟 4/6 · 實作 42 分鐘

讓兩個條件一起生效

完成可交集的搜尋分類,知道每次應有幾筆。

先準備

  • 自己正常portfolio的index.html、works.html、services.html、完整styles.css
  • 本機圖片、既有六筆資料;變更前副本與自己的Git基準
  • 七筆資料的projects.js與自己的四組預期表

親手寫下四組預期筆數;用修改Prompt加入控制,再自己輸入與切分類。

跟著做

  1. 先記全部7、網站+晨光1、攝影+晨光0、不存在0。
  2. 限定AI加入標題搜尋與四分類,不改作品資料。
  3. 實測trim空白、分類保留關鍵字、零筆與鍵盤入口。

加入分類與標題搜尋

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己正常portfolio的index.html、works.html、services.html、完整styles.css
  • 本機圖片、既有六筆資料;變更前副本與自己的Git基準
  • 七筆資料的projects.js與自己的四組預期表
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 新增輸入、四分類、即時筆數與零筆文字。
  • 使用&&交集,安全渲染,資料不改。
4.自己檢查結果
  • 四組預期符合,切分類保留關鍵字。
  • 空白trim、按鈕選取與結果數同步,零筆沒有殘留卡片。
加入分類與標題搜尋 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:承接第8堂六張靜態作品、APPA、原紫綠tokens、4:3圖片框與600/1024斷點。將六筆資料移入projects.js,欄位為唯一id、title、category、image、alt、summary、width、height及首筆reference。分類品牌兩筆、網站兩筆、攝影兩筆,晨光工作室網站屬網站。學生另加photo-03雨後街角,沿用work-layout.jpg且如實標為示意;不新增後端。

本次任務:在現有七筆projects.js作品頁加入標題搜尋與全部/品牌/網站/攝影四個原生button,aria-pressed反映目前分類。關鍵字trim並不分英文大小寫,只查title;搜尋與分類必須同時符合(&&),切分類保留關鍵字。每次更新筆數,零筆清掉舊卡片並有明確文字。只改works.html、projects.js與必要控制CSS,保留七筆資料、網格、圖片、APPA與其他頁。這堂不加清除按鈕或手機選單,列全部7/網站晨光1/攝影晨光0/無結果0與鍵盤待驗。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 四組預期符合,切分類保留關鍵字。
  • 空白trim、按鈕選取與結果數同步,零筆沒有殘留卡片。
接著進行第 5 步
步驟 5/6 · 觀念 18 分鐘

先重現錯誤筆數,再修判斷

用實際資料證明&&與||造成的差異。

先準備

  • fault-L09/portfolio的works.html、projects.js、CSS
  • 網站+晨光的操作順序、錯誤筆數及多出作品id

故障副本把交集改成聯集,網站+晨光會出現不含晨光的網站作品。資料沒錯,應修filter條件,不刪作品湊到一筆。

// 故障:categoryMatch || titleMatch
// 正常:categoryMatch && titleMatch

跟著觀察

  1. 用正常版記網站+晨光的那一筆id。
  2. 在故障版記多出作品的id、分類與標題。
  3. 指出事件有保留輸入,問題在篩選條件。

做完,自己確認

  • 用實際資料證明&&與||造成的差異。
  • 能指出指定檔案與作用範圍。
接著進行第 6 步
步驟 6/6 · 實作 42 分鐘

找出多出來的作品

修復交集故障,能說明多出結果的原因。

先準備

  • fault-L09/portfolio的works.html、projects.js、CSS
  • 網站+晨光的操作順序、錯誤筆數及多出作品id

獨立fault-L09先用晨光與網站重現,記下原資料與錯誤筆數。

跟著做

  1. 取得故障包,附七筆資料、重現順序與實際結果。
  2. 請AI只修交集判斷,保留事件與資料。
  3. 回跑四組、圖片、網格與連結,保存最小diff。

修復搜尋分類的交集

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • fault-L09/portfolio的works.html、projects.js、CSS
  • 網站+晨光的操作順序、錯誤筆數及多出作品id
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 只把錯誤聯集改交集,定位來源並說明原因。
  • 不改任何作品內容、網格與其他頁。
4.自己檢查結果
  • 錯誤筆數回到預期四組,零筆清舊卡片。
  • 修復只有一個條件差異,七筆資料及圖片保留。
修復搜尋分類的交集 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:承接第8堂六張靜態作品、APPA、原紫綠tokens、4:3圖片框與600/1024斷點。將六筆資料移入projects.js,欄位為唯一id、title、category、image、alt、summary、width、height及首筆reference。分類品牌兩筆、網站兩筆、攝影兩筆,晨光工作室網站屬網站。學生另加photo-03雨後街角,沿用work-layout.jpg且如實標為示意;不新增後端。

本次任務:故障副本輸入晨光再選網站,出現不含晨光的網站作品。依附七筆資料、事件、實際結果與filter定位const matched = categoryMatch || titleMatch這一處,只修為同時符合兩條件,保留輸入、分類、資料、render與版型。不刪作品、不重寫全站、不用假筆數。列全部空查詢7、網站晨光1、攝影晨光0、無結果0的回歸與學生實測欄。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 錯誤筆數回到預期四組,零筆清舊卡片。
  • 修復只有一個條件差異,七筆資料及圖片保留。
留下本堂檢查紀錄

留下自己的檢查紀錄

記下實際做過的操作、差異與結果。還沒做的項目寫「待完成」。

勾選與筆記只保存在這個瀏覽器。

重設只清除勾選,網站檔案與檢查筆記都保留。

帶著這一步,繼續往前。

保留正常作品與實際檢查紀錄;未完成的操作可以回來補做。

帶著作品,進入第 10 堂