可在html5中用localstorage按yyyy-mm-dd格式键名保存日历备注,支持单条覆盖或json数组追加;渲染时动态读取并插入dom,配合storage事件实现跨标签同步,需容错处理和用户体验优化。

可以在HTML5中用LocalStorage保存用户为日历某一天添加的备注内容,实现关闭页面后再次打开仍能显示历史备注的效果。关键在于把日期作为键(key),备注文本作为值(value)存入,读取时按当前视图日期动态获取。
设计存储结构:用日期字符串作唯一键
LocalStorage只支持字符串键值对,推荐使用 YYYY-MM-DD 格式(如 "2024-06-15")作为键名,确保唯一、可排序、易读且兼容JavaScript Date处理。避免用毫秒时间戳——虽唯一但不直观;也别用中文日期(如“6月15日”),易因格式/语言变化导致读取失败。
添加与更新备注:先获取再合并或覆盖
用户点击某天输入备注后,不要直接覆盖旧内容,建议按需选择策略:
- 若需求是“单条备注”,直接
localStorage.setItem(dateKey, remarkText) - 若允许多条记录(如每日记多件事),可存为JSON数组:
const list = JSON.parse(localStorage.getItem(dateKey) || '[]');list.push({ time: new Date().toISOString(), content: remarkText });localStorage.setItem(dateKey, JSON.stringify(list));
渲染日历时自动加载对应备注
当切换月份或进入某天视图时,用当天日期生成 key,查 localStorage:
- 获取日期对象后格式化为
yyyy-mm-dd字符串(可用date.toISOString().slice(0,10)) - 执行
const remark = localStorage.getItem(dateKey) - 若返回非 null 值,就插入到该日期单元格的 DOM 中(例如追加一个
<div class="note">${remark}</div>) - 注意处理空值或解析失败:加 try-catch,JSON场景下解析异常时设为空数组
增强体验的小细节
纯 localStorage 不触发跨标签同步事件,用户在另一个窗口修改后,当前页不会自动更新。可监听 storage 事件做响应:
- 在页面初始化后添加
window.addEventListener('storage', e => { if (e.key.startsWith('20')) renderNote(e.key); }) - 为避免重复保存,提交前校验内容是否真有变化(trim 后比对)
- 给备注区域加简单样式(如浅黄底色+小图标),视觉上区分于普通日期数字
不复杂但容易忽略:每次读写都应做类型判断和容错,比如 localStorage 满了会抛错,可用 try-catch 包裹 setItem,并提示用户清理或改用 IndexedDB 备选。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











