You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

页面刷新时如何恢复localStorage中存储的待办列表数据

待办列表刷新恢复localStorage数据的实现方案

你需要补充页面初始化读取存储数据渲染、删除操作同步更新存储的逻辑,修改后的完整代码如下:

let inputField = document.querySelector('#inputField');
let submitBtn = document.querySelector('#submit-btn');
let toDoList = document.querySelector('#toDoList');

// 通用待办项渲染方法,避免新增和初始化逻辑重复
function renderTodoItem(content) {
  let newLi = document.createElement('li');
  newLi.className = 'toDoItems';
  newLi.textContent = content;
  toDoList.appendChild(newLi);
}

// 页面初始化加载localStorage里的所有待办项
function initTodos() {
  for (let i = 0; i < localStorage.length; i++) {
    const todoKey = localStorage.key(i);
    renderTodoItem(todoKey);
  }
}

// DOM加载完成后执行初始化
document.addEventListener('DOMContentLoaded', initTodos);

submitBtn.addEventListener('click', function(event){
  event.preventDefault();
  const content = inputField.value.trim();
  // 空内容校验,避免存储无效待办
  if (!content) return;
  renderTodoItem(content);
  localStorage.setItem(content, content);
  inputField.value = "";
});

toDoList.addEventListener('click', function(e){
  // 避免误删列表内其他元素
  if (e.target.classList.contains('toDoItems')) {
    const content = e.target.textContent;
    // 删除页面元素同时同步移除localStorage存储
    localStorage.removeItem(content);
    e.target.remove();
  }
});

优化建议

你当前的存储逻辑是用待办内容同时作为localStorage的key和value,如果出现两个完全相同的待办项,会出现存储覆盖、删除异常的问题,建议将所有待办项存入数组后序列化存储,优化后的核心逻辑如下:

const TODO_STORAGE_KEY = 'user_todo_list';

// 读取存储的待办数组
function getTodoList() {
  return JSON.parse(localStorage.getItem(TODO_STORAGE_KEY) || '[]');
}

// 保存待办数组到存储
function saveTodoList(list) {
  localStorage.setItem(TODO_STORAGE_KEY, JSON.stringify(list));
}

// 初始化逻辑调整为读取数组渲染
function initTodos() {
  getTodoList().forEach(item => renderTodoItem(item));
}

// 新增待办逻辑调整
submitBtn.addEventListener('click', function(event){
  event.preventDefault();
  const content = inputField.value.trim();
  if (!content) return;
  const todoList = getTodoList();
  todoList.push(content);
  saveTodoList(todoList);
  renderTodoItem(content);
  inputField.value = "";
});

// 删除待办逻辑调整
toDoList.addEventListener('click', function(e){
  if (e.target.classList.contains('toDoItems')) {
    const content = e.target.textContent;
    const todoList = getTodoList();
    // 找到第一个匹配的待办项删除
    const targetIndex = todoList.findIndex(item => item === content);
    if (targetIndex > -1) {
      todoList.splice(targetIndex, 1);
      saveTodoList(todoList);
    }
    e.target.remove();
  }
});

内容的提问来源于stack exchange,提问作者Apollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:36:03