⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

JS 综合实战: Todo应用

综合运用DOM、事件、数组创建Todo应用 · 难度:进阶 · +15XP

JavaScript 综合实战:Todo 待办事项应用

本实战项目综合运用了 DOM 操作事件处理数组管理localStorage 持久化等核心 JavaScript 技能,构建一个功能完整的待办事项应用。

项目功能需求

  1. 添加新的待办事项
  2. 标记事项为已完成/未完成
  3. 删除单个事项
  4. 统计完成数量
  5. 数据持久化到 localStorage

HTML 结构

<!-- 基础 HTML 结构 -->
<div id="todo-app">
  <h2>我的待办事项</h2>
  <div class="input-group">
    <input id="taskInput" type="text" placeholder="输入新任务...">
    <button id="addBtn">添加</button>
  </div>
  <ul id="taskList"></ul>
  <div class="stats">
    <span>已完成:<strong id="doneCount">0</strong></span>
    <span>总计:<strong id="totalCount">0</strong></span>
  </div>
</div>

JavaScript 核心逻辑

功能方法说明
添加addTask()读取输入,创建任务,刷新列表
切换toggleTask(id)标记完成/未完成状态
删除deleteTask(id)从数组移除,刷新列表
渲染renderTasks()遍历数组,生成 DOM
存储saveTasks()写入 localStorage
// 完整 JavaScript 实现
class TodoApp {
  constructor() {
    this.tasks = JSON.parse(localStorage.getItem("tasks") || "[]");
    this.input = document.getElementById("taskInput");
    this.list = document.getElementById("taskList");
    document.getElementById("addBtn").onclick = () => this.addTask();
    this.input.onkeydown = (e) => {
      if (e.key === "Enter") this.addTask();
    };
    this.render();
  }
  addTask() {
    const text = this.input.value.trim();
    if (!text) return;
    this.tasks.push({ id: Date.now(), text, done: false });
    this.input.value = "";
    this.save();
    this.render();
  }
  toggleTask(id) {
    const task = this.tasks.find(t => t.id === id);
    if (task) { task.done = !task.done; this.save(); this.render(); }
  }
  deleteTask(id) {
    this.tasks = this.tasks.filter(t => t.id !== id);
    this.save();
    this.render();
  }
  render() {
    this.list.innerHTML = this.tasks.map(t =>
      "
  • " + "" + "" + t.text + "" + "" + "
  • " ).join(""); document.getElementById("doneCount").textContent = this.tasks.filter(t => t.done).length; document.getElementById("totalCount").textContent = this.tasks.length; } save() { localStorage.setItem("tasks", JSON.stringify(this.tasks)); } } const app = new TodoApp();
    Ctrl+Enter
    🚀 升级VIP
    解锁全部课程+AI助手

    🏆 学习排行

    加载中...

    📊 统计

    📖 231 篇
    0 完成
    🔥 0