如何为待办列表项添加创建日期并存储后在网页展示?
待办项添加创建日期的实现建议
- 修复HTML基础问题
input输入框的提示属性拼写错误,将placehoder修改为placeholder即可正常显示输入提示文字。 - 优化待办数据存储结构
不要直接往todo数组中存储输入框DOM对象,改为存储包含待办内容、创建时间的结构化对象,已有的3条初始待办也补全初始化时间,方便后续统一渲染和管理:// 初始待办数据示例,可根据需求调整初始时间 const todo = [ { content: 'Item 1', createTime: new Date() }, { content: 'Item 2', createTime: new Date() }, { content: 'Item 3', createTime: new Date() } ] - 新增时间格式化工具函数
将原生Date对象转换为易读的日期时间格式,避免直接输出原始Date对象的冗余内容:function formatTime(date) { const year = date.getFullYear() const month = String(date.getMonth() + 1).padStart(2, '0') const day = String(date.getDate()).padStart(2, '0') const hour = String(date.getHours()).padStart(2, '0') const minute = String(date.getMinutes()).padStart(2, '0') return `${year}-${month}-${day} ${hour}:${minute}` } - 修改新增待办逻辑
点击添加按钮时生成当前时间,渲染列表项时同步展示日期,同时修复原有代码的已知问题(未提前获取按钮元素、存储内容错误、重复id问题):const completelist = document.getElementById("thelist"); const todoButton = document.getElementById("todo-button"); let counter = 4; function formatTime(date) { const year = date.getFullYear() const month = String(date.getMonth() + 1).padStart(2, '0') const day = String(date.getDate()).padStart(2, '0') const hour = String(date.getHours()).padStart(2, '0') const minute = String(date.getMinutes()).padStart(2, '0') return `${year}-${month}-${day} ${hour}:${minute}` } // 渲染初始待办的创建时间 document.querySelectorAll('#thelist .todo').forEach((item, index) => { const timeTag = document.createElement('span') timeTag.style.cssText = 'margin-left: 12px; color: #999; font-size: 12px;' timeTag.textContent = formatTime(todo[index].createTime) item.appendChild(timeTag) }) todoButton.onclick = function addelement() { const userTodoInput = document.getElementById("todoInput"); const inputVal = userTodoInput.value.trim() if(inputVal !== ""){ const currentTime = new Date() // 存入结构化数据 todo.push({ content: inputVal, createTime: currentTime }) // 渲染带时间的列表项 const node = document.createElement("LI"); node.className = 'todo' node.id = `todo${counter}` node.innerHTML = `${inputVal} <span style="margin-left: 12px; color: #999; font-size: 12px;">${formatTime(currentTime)}</span>`; completelist.appendChild(node); // 操作提示去掉重复id,增加时间展示 document.getElementById("mydiv").innerHTML += `<div class='todo'><p> You have added this to the list of actions: ${inputVal},创建时间:${formatTime(currentTime)}</p><br></div>`; // 清空输入框方便下次输入 userTodoInput.value = '' } else { alert("Enter something in textarea") } counter++; } - 可选优化
如果需要刷新页面后数据不丢失,可以把todo数组转成JSON字符串存储在localStorage中,页面初始化时再读取解析即可。
内容的提问来源于stack exchange,提问作者coco
相关产品推荐
相关产品推荐

