HTML列表动态加载更多需后端返回JSON(含items、has_more、next_offset),前端用insertAdjacentHTML安全追加,按钮防连点并依has_more控制显隐,禁用innerHTML+=和HTML字符串接口。
HTML列表动态加载更多,核心是“不刷新页面、只追加内容”,关键不在标签本身(ul/ol/li只是容器),而在JavaScript如何安全、可控地把新项塞进去。直接拼HTML字符串或重写innerHTML容易出问题,得用更稳妥的方式。
接口应返回JSON,包含明确字段:
返回带<div></div>的HTML字符串是危险做法——破坏语义、影响SEO、易引发XSS,也难做DOM事件绑定。
拿到数据后,把每条生成HTML字符串,再用insertAdjacentHTML('beforeend', htmlString)插入到ul或ol末尾:
innerHTML +=,那会强制重绘全部内容document.createElement逐个创建li再append,但性能略低用户手快连点两次,会导致请求乱序、内容覆盖甚至重复插入:
button.disabled = true,并加is-loading类触发CSS骨架或文字变“加载中…”event.preventDefault(),尤其按钮在form内或没设type="button"时后端返回{"items":[],"has_more":false}才代表真没更多;如果只检查data.items.length === 0,网络错误或空响应会被误判为“到底了”,导致按钮消失、用户无法重试:
response.has_more控制按钮显隐response.next_offset作为下次请求参数,不靠前端硬算isLoading = true标志,防止滚动或点击重复触发