0

目录生成器

粘贴 Markdown 或 HTML,并获得一个嵌套的、可点击的目录,其中包含真正的 GitHub 风格的碰撞安全锚点,以及注入的标题 ID 的原始内容。

自动检测首先查找真正的

-

标签,然后查找 Markdown # 标题。

在每个标题后添加 {#slug} 属性 - 由 kramdown、Pandoc、MkDocs 和 GitHub Pages (Jekyll) 支持。

Buy Me a Coffee at ko-fi.com
处理中... 0%
检测内容格式
解析标题
分配碰撞安全段
构建目录

结果

目录的作用取决于其下面的锚链接,而锚链接只有在每个标题都有一个唯一的、可预测的 slug 时才可靠。该生成器会解析您粘贴的任何内容(Markdown 或 HTML)中的标题,并为每个标题分配一个真正的 GitHub 风格的锚点:小写文本、空格和标点符号被替换或删除,而且最重要的是,只要两个标题会产生相同的 slug,就需要一个真正的防冲突后缀。文档中的第二个“Introduction”变为introduction-1,第三个变为introduction-2,通过运行的出现图进行跟踪,这与 GitHub 自己的 slugger 的工作方式完全相同 - 不是在标题重复时默默地覆盖早期链接的快捷方式,这是手卷目录脚本中断的最常见方式。

Markdown 解析是基于行的,因为简单实现的经典失败模式是将写在围栏代码块内的“#”视为标题。该工具在逐行遍历文档时跟踪 ``` 或 ~~~ 栅栏当前是否打开,并且仅识别打开栅栏之外的 ATX 标题(# 到 ######) - 因此显示 shell 注释或 Python“# 注释”的代码示例永远不会污染您的目录。 HTML 输入采用不同的、同样真实的路径:它使用浏览器自己的 DOMParser 进行解析,通过标签名称选择标题,并且在将文档序列化回字符串之前,将每个元素的 id 属性直接设置在实际元素上。

另一端出现了两件事。首先,目录本身,导出为嵌套 Markdown 列表(- [Title](#slug),按标题级别缩进)和嵌套 HTML 列表 (<ul><li><a href="#slug">),每个列表都有自己的复制按钮。其次,您的原始内容与实际连接的锚点:对于 Markdown 输入,您可以选择 kramdown、Pandoc、MkDocs 和 GitHub Pages 的 Jekyll 使用的广泛支持的 {#slug} 标题属性语法,或者如果您的目标渲染器不理解属性语法,则回退到已设置 id="slug" 的纯 HTML 标题标记。对于 HTML 输入,id 直接注入到已解析的标题元素中 - 没有单独的“模式”可供选择,因为标签已经存在。

一切都在您的浏览器本地运行:解析、slug 数学和文档重组都在您现在正在查看的页面上的 JavaScript 中进行,无需上传任何内容。这对于草稿文档、内部 wiki 或未发布的博客文章很重要,您还没有准备好将其粘贴到第三方服务中以获得工作目录。