value属性用于强行指定某个li的显示序号,后续项无条件+1递增;它不修复断号、不兼容跳号逻辑,仅在ol直接子元素中有效,且值必须为纯整数字符串。

value 属性不是“设置有序列表的编号方式”,而是**强行指定某个 li 的显示序号**,后续项无条件 +1 递增。它不修复断号、不兼容跳号逻辑、也不影响语义结构——用错场景反而会让列表在无障碍和打印中表现异常。
什么时候该用 value,而不是 start
start 控制整个 ol 的起始编号,语义清晰、无障碍友好;value 只针对单个 li 强制赋值,属于“硬切计数流”。
- 用
start="5":你想让整个列表从 5 开始,比如“第五步”“第六步”——这是常规需求,优先选它 - 用
value="22":法律条文明确要求“第20条”后直接是“第22条”,中间缺 21;或前一个ol以<li value="7">结尾,下一个ol第一项必须显示为 8(靠 JS 或 CSS 难以可靠续接) - 别用
value来“隐藏某项”或“调整视觉顺序”——这些该用 CSScounter-increment: none或list-style: none+ 手动编号
value 失效的常见原因
浏览器对 value 的支持虽广,但 DOM 结构稍有偏差就会静默失效,且不报错。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
-
<ul><li value="5">Item</ul>——value只在<ol>内有效,<ul>中写了等于没写 -
<ol><div><li value="10">A</div></ol>——li必须是ol的**直接子元素**,中间插任何标签(div、p、甚至注释节点)都会中断计数上下文 -
<ol><li value="5.0">A</li></ol>—— 值必须是纯整数字符串,"5.0"、"five"、""全部被忽略,回退到自动计数 -
<ol><li>One</li><li value="10">Ten</li></ol>—— 第一项仍是 1,第二项强制为 10,中间空档不会填补,也不会重置后续逻辑
JavaScript 动态设置 value 要注意什么
通过 JS 设置 li.value = 100 是合法的,但效果取决于当前 DOM 状态。
立即学习“前端免费学习笔记(深入)”;
- 必须确保该
li已挂载在<ol>下,且是直接子节点;插入前先设value没用,得插入后再赋值 -
li.value是可读写的 DOM 属性,但修改它**不会触发重新渲染计数流**——如果父ol已完成渲染,可能需要强制重排(如li.offsetParent)或替换节点 - 用
setAttribute('value', '100')和li.value = 100效果一致,但前者传非数字字符串会静默失败,后者会转成NaN并退化为默认计数 - 移动端 Safari 或旧版 Chrome 中,若
li内含未包裹的块级元素(如直接写<p>text</p>),也可能导致value不生效——这不是 bug,是规范要求:非法嵌套 → 计数上下文丢失
真正需要 value 的场景极少,多数所谓“自定义编号”需求其实该用 CSS 计数器;一旦用了 value,就要接受它带来的不可逆序号断裂和语义弱化——这点在导出 PDF 或屏幕阅读器播报时特别明显。


















