\_progress 是纯文本占位符,需 javascript 替换;推荐用 data-progress 属性或原生 \ 标签实现语义化、可维护的进度更新。

_PROGRESS 不是浏览器识别的标签,也不会自动更新——它只是你写在 HTML 里的普通文本占位符。想让它变成“65%”,必须用 JavaScript 主动查找并替换。
_PROGRESS 是字符串,不是 DOM 元素
- 浏览器会把它当作文本节点渲染,和写“已完成 _PROGRESS”没区别
-
document.querySelector('_PROGRESS')会返回null,因为不存在这个标签名 - 常见错误:以为加个 class 或 id 就能选中,实际得靠正则或属性定位
用 JS 更新时,核心思路是「找文本、改内容」,而不是「操作元素」:
- 直接改
innerHTML最快,但会清空事件监听器、销毁子组件,慎用于含按钮、输入框的容器 - 更稳妥的是遍历文本节点,只改含
_PROGRESS的那一段:function updateProgress(value) { const regex = /_PROGRESS/g; const walker = document.createTreeWalker( document.body, NodeFilter.SHOW_TEXT, { acceptNode: node => regex.test(node.nodeValue) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT } ); let node; while (node = walker.nextNode()) { node.nodeValue = node.nodeValue.replace(regex, `${value}%`); } } - 如果结构固定(比如只在
<div id="status"> 里出现),优先用:<code>document.querySelector('#status').textContent = <code>已完成 ${value}%
改用
data-progress属性更可靠硬编码
_PROGRESS容易和用户输入冲突(比如评论里写了“我的进度是_PROGRESS”),也难做类型校验。推荐写法:
- HTML:
<div data-progress>已完成 <span class="percent">0%</span> </div> - JS 更新:
document.querySelector('[data-progress] .percent').textContent = value + '%' - 多处同步?加统一 class:
document.querySelectorAll('[data-progress] .percent').forEach(el => el.textContent = value + '%')
这样语义清晰、可批量、不误伤真实文本,后续加 ARIA 或动画也方便。
<progress></progress>标签才是真·原生进度条如果你真正想要的是带语义、可访问、样式可控的进度指示器,别折腾
_PROGRESS占位符,直接用原生<progress></progress>:- 必须同时设
value和max,例如:<progress value="65" max="100"></progress> - 更新时直接赋值:
bar.value = 65(注意:传字符串如"65"会静默失败) - 防越界写法:
bar.value = Math.min(Math.max(0, newValue), bar.max) - 百分比是浏览器自动算的(
value / max × 100%),max不一定要是 100;上传大文件时用字节做量纲更准:<progress value="1250" max="5000"></progress>
关键点容易被忽略:
_PROGRESS替换和<progress></progress>更新是两套逻辑——前者是纯文本处理,后者是语义化 DOM 控制。混用会导致状态不一致,比如后端模板先渲染了_PROGRESS文本,前端 JS 又去改<progress></progress>的value,结果页面上显示两个不同数值。选一种,坚持到底。 - HTML:











