🐵指尖猴全新升级
第8课:做一个待办清单App
📋

做一个待办清单App

做一个待办清单App——让数据存得住才算真App

📖知识引入

📝列表展示
待办App的核心是一个列表:每条待办有文字、复选框(是否完成)、删除按钮。用JavaScript数组存所有待办,循环渲染到页面上,增删改都重新渲染。
➕增删改三连
输入框+「添加」按钮=新增;每条后的「×」按钮=删除;点待办文字=改成可编辑状态。这三个动作是所有清单类App的标配,Todoist、滴答清单都这套。
💾本地存储localStorage
刷新页面待办就消失?因为只住在内存里!用浏览器内置的localStorage,把数组转成字符串存进浏览器,下次打开自动读取——无需后端,零成本数据持久化。
✅勾选完成
点复选框把待办标记为已完成:文字加删除线、变灰色、移到列表底部。数据里加一个 done: true/false 字段,渲染时按这个字段加不同样式——这就是状态管理。
📊清空与统计
高级功能:清空已完成的待办、统计还有几条没做(「今天还剩3件事」)。告诉AI加这些功能,它会自动改数据结构和渲染逻辑,让App从能用变成好用。
💡
localStorage让数据存得住——刷新页面待办不消失,零后端成本!

🔍待办清单App的诞生记

// 待办App核心逻辑
let todos = JSON.parse(localStorage.getItem("todos") || "[]");

function save() {
  localStorage.setItem("todos", JSON.stringify(todos));
}

function add() {
  const input = document.querySelector("#input");
  if (input.value.trim()) {
    todos.push({ text: input.value, done: false });
    input.value = "";
    save(); render();
  }
}

function toggle(i) {
  todos[i].done = !todos[i].done;
  save(); render();
}

function render() {
  const list = document.querySelector("#list");
  // 用字符串拼接,避免模板字符串的转义
  list.innerHTML = todos.map((t, i) =>
    "<li class='" + (t.done ? "done" : "") + "'>" +
      "<input type='checkbox' " + (t.done ? "checked" : "") +
      " onchange='toggle(" + i + ")'> " + t.text +
    "</li>"
  ).join("");
}
render();

跟着做,做出能用的Todo App:

第1步 提需求
「用HTML+CSS+JS做一个待办清单:
  - 输入框+添加按钮新增待办
  - 每条带复选框和删除按钮
  - 完成的加删除线变灰
  - 用localStorage保存,刷新不丢
  - 简洁清爽,配色绿色」
第2步 AI生成代码
index.html / style.css / script.js
核心数据结构:
  todos = [
    { text: "写作业", done: false },
    { text: "买菜", done: true }
  ]

第3步 测试核心功能

添加「学Trae」→列表出现 ✅
勾选→加删除线 ✅
刷新页面→还在 ✅
删除→消失 ✅

第4步 迭代升级 「加一个统计:今天还剩X件没做」 「加一个清空已完成按钮」 「待办太多时支持滚动」

第5步 自定义 改成你的颜色、加图标、 改成记录学习任务、购物清单……

数据流闭环:

输入→加到数组→存localStorage
→渲染到页面→用户操作→更新数组
→再存→再渲染

你的待办App,从此诞生!

🎯小测验

第1题:为什么刷新页面待办会消失?

第2题:localStorage的特点是?

第3题:标记一条待办为「已完成」,数据上要?

📝本课知识点

  • ✓待办核心:列表+复选框+删除按钮
  • ✓增删改三连是所有清单App的标配
  • ✓localStorage让数据存得住
  • ✓done字段管理状态
  • ✓统计和清空让App从能用到好用
第8课完成!继续探索下一课吧 🚀