消息列表需用语义化HTML(如<article><h3><time>)替代div堆砌,按钮须为<button>并带data-msg-id;未读状态以后端为准,localStorage仅缓存ID等关键字段;分页需手动监听事件加载数据,时间显示须本地化处理。
结构混乱会导致点击态丢失、滚动错位、屏幕阅读器无法识别。别用一堆嵌套 <div> 拼消息项,优先用语义化组合:
<article> 包裹,代表独立内容单元<h3>,时间戳放 <time datetime="2026-04-07T19:30">刚刚</time>,便于机器解析aria-label="未读:系统更新通知",而不是只靠 CSS 隐藏/变色<button>,且带 data-msg-id 属性localStorage 存未读消息列表简单可靠,但它是前端副本,不是真相。服务端仍需维护真实未读状态,否则多端登录、页面刷新、离线操作都会翻车。
id、title、time、read: false,不存大段正文或 base64 图片JSON.parse(window.localStorage.getItem('unreadMsgs') || '[]'),防止首次为 null 报错msg_id 为已读,成功后再更新 localStorage 并移除对应项localStorage 的缓存值你看到的 $("#page2").page({}) 是某款 jQuery 分页插件,它只管 UI 渲染,不拉数据。配置完就以为“自动加载”,是新手最常踩的坑。
pageClicked 和 jumpClicked 事件,在回调里调用 AJAX 获取对应页数据total 参数得从接口返回的真实总条数赋值,不能硬写死 —— 否则第 20 页之后点不动.active 类,否则多条消息同时高亮<li> 加 padding: 12px 16px,别只依赖文字大小后端返回的时间字段如果是 UNIX 时间戳或 ISO 字符串,前端必须做本地化处理,否则用户看到的是 UTC 时间,和手机系统对不上。
立即学习“前端免费学习笔记(深入)”;
new Date(timestamp).toLocaleString() 或 Intl.DateTimeFormat,不要直接拼字符串"2026-04-07T19:30:00Z",用 new Date() 构造后调用 .toLocaleTimeString() 才能匹配用户本地时区