Markdown解析器默认将视为原始HTML块而跳过解析,导致序号丢失、嵌套失效且内部Markdown语法(如加粗)不生效;应优先使用原生数字列表语法(如1. 项目),需自定义起始值或嵌套时通过数字前缀与缩进实现。

为什么 <ol></ol> 在 Markdown 转换后序号乱了或不显示
不是 HTML 标签没被识别,而是多数 Markdown 解析器(如 marked、Python-markdown)默认把 <ol></ol> 当作“原始 HTML 块”跳过解析——它原样保留标签,但不会主动补 <li> 的序号逻辑,也不处理嵌套层级或 start 属性。更麻烦的是,如果 Markdown 内容里混写了 <ol><li>**内容**</li></ol>,**内容** 不会被转成 <strong></strong>,因为块级 HTML 内部默认禁用 Markdown 解析。
marked.parse() 中正确嵌入有序列表的写法
别手动写 <ol></ol>,直接用 Markdown 原生语法:1. 第一项、2. 第二项。解析器会自动输出语义正确的 <ol start="1"></ol> 和 <li>。
- 需要自定义起始序号?写
5. 从五开始,marked会生成<ol start="5"></ol> - 要嵌套?用缩进 + 数字:空行后写
1. 子项(两个空格),它会渲染为嵌套<ol></ol> - 混写 HTML 块时,若真必须用
<ol></ol>,请确保内部只用纯 HTML:<ol><li><strong>加粗文本</strong></li></ol>,不要指望**加粗**在里面生效
Python markdown 库中 <ol></ol> 的兼容性陷阱
Python 的 markdown 库(非 markdown-it-py)对 start、reversed、type 等 HTML5 属性支持有限。即使你手写 <ol start="10" type="A"></ol>,输出 HTML 很可能丢掉 type="A",仍按数字渲染。
使用 SQLite FTS5 对结构化 Markdown 文档库进行全文搜索,适用于需要快速、高效搜索大量 Markdown 文章的场景。
- 解决方案:启用
attr_list扩展(需 pip install markdown),然后写<ol start="10" type="A">{:.my-ol}</ol>,再配合 CSS 控制视觉样式 - 更稳做法:放弃 HTML 属性,用纯 Markdown + CSS 类控制外观,例如
1. 项目后加{:#custom-ol},再用#custom-ol { list-style-type: upper-alpha; counter-reset: list-item 9; } - 注意:
start值在 Pythonmarkdown中仅影响 HTML 输出的start属性,浏览器是否尊重它,取决于 CSScounter-reset是否覆盖
服务端预渲染时如何保留 <ol></ol> 的语义与样式一致性
如果你用 Pandoc 或服务端脚本批量生成 HTML,<ol></ol> 的序号行为其实由两层决定:Pandoc 解析阶段生成的 HTML 结构,以及最终页面加载的 CSS。常见断裂点是 CSS 重置了所有列表样式。
立即学习“前端免费学习笔记(深入)”;
- 检查输出 HTML 是否含
start属性:若没有,说明输入 Markdown 没用数字序号,或 Pandoc 版本太老(start 推断 - 强制保留序号样式:在 HTML 模板的
里加一段 CSS:ol { list-style-type: decimal; } ol[reversed] { list-style-type: decimal-reverse; } - 避免全局污染:不要用
* { list-style: none; }这类重置规则,它会让所有<ol></ol>失去序号,且 Markdown 转换器无法修复
真正难处理的不是语法转换,而是当 HTML 布局表格、CSS 重置、Markdown 扩展三者叠加时,<ol></ol> 的序号会悄无声息地消失——它不报错,只静默失效。


















