推荐开源项目:rehype-slug - 自动添加HTML标题ID

推荐开源项目:rehype-slug - 自动添加HTML标题ID

rehype-slugplugin to add `id` attributes to headings项目地址:https://gitcode.com/gh_mirrors/re/rehype-slug

项目介绍

rehype-slug是一个基于unified和rehype的插件,专门设计用来为HTML文档中的标题元素(<h1><h6>)自动添加id属性。它的核心算法采用了与GitHub相匹配的方式,即github-slugger,确保了生成的ID符合标准且易于链接。

项目技术分析

  • 基于unified: unifed是一个强大的处理文本内容的框架,支持多种语言抽象语法树(AST),如Markdown和HTML。
  • rehype兼容: rehype是unified的一个扩展,专注于处理HTML内容的AST。
  • github-slugger算法: 这个插件采用的ID生成算法与GitHub一致,可以保证生成的ID符合开发者在GitHub上使用的习惯。

项目及技术应用场景

  • 长文档导航: 在编写长篇技术文档或文章时,可以通过rehype-slug为每个章节添加ID,方便读者直接跳转到特定部分。
  • SEO优化: 添加自定义ID有助于搜索引擎更好地理解页面结构,提高SEO效果。
  • 自动化构建工具集成: 可以将该插件集成到你的HTML预处理流程中,如Jekyll、Hugo等静态网站生成器。
  • 可链接的头部: 结合使用rehype-autolink-headings,可以在每个标题下方自动生成链接,增加文档的交互性。

项目特点

  1. 自动添加ID: 根据标题文本自动生成唯一的ID,无需手动操作。
  2. 可配置性: 提供前缀设置选项,可以根据需求自定义ID的前缀。
  3. ESM支持: 兼容Node.js 16+版本,并提供浏览器和Denno环境的导入方式。
  4. 安全考虑: 注意到DOM Clobbering的安全问题,建议配合使用rehype-sanitize进行防护。

使用方法

安装插件后,通过统一处理流程来应用rehype-slug,它可以轻松地与rehype生态系统中的其他插件一起工作,为你的HTML文件带来便利。

总结

rehype-slug是一个强大而实用的工具,它使HTML文档的标题管理变得简单,提高了阅读和导航体验。如果你正在处理大量HTML内容,或者希望提升你的项目文档质量,那么这个开源项目值得你尝试和加入到你的开发工具库中。

rehype-slugplugin to add `id` attributes to headings项目地址:https://gitcode.com/gh_mirrors/re/rehype-slug

要更改 `markdown-navbar` 组件中生成的导航链接的 `data-id` 属性,你可以使用 `remark` 和 `remark-slug` 插件来为 markdown 中的标题添加自定义的 `slug`,然后在 `markdown-navbar` 中使用 `slug` 来覆盖默认的 `id` 和 `data-id` 属性。 以下是一个示例代码: ```jsx import React from 'react'; import ReactMarkdown from 'react-markdown'; import Navbar from 'markdown-navbar'; import 'markdown-navbar/dist/navbar.css'; import remarkSlug from 'remark-slug'; import unified from 'unified'; const MyMarkdown = ({ source }) => { const processor = unified().use(remarkSlug); const markdownAST = processor.parse(source); const headings = []; processor.runSync(markdownAST).children.forEach((node) => { if (node.type === 'heading') { // 获取自定义的 slug const slug = node.data?.hProperties?.slug; // 将 slug 覆盖默认的 id 和 data-id 属性 node.data = { hProperties: { id: slug, 'data-id': slug, }, }; headings.push({ level: node.depth, title: node.children[0].value, slug, }); } }); return ( <> <Navbar headings={headings} /> <ReactMarkdown astPlugins={[remarkSlug]}>{source}</ReactMarkdown> </> ); }; export default MyMarkdown; ``` 在这个示例中,我们使用 `unified` 和 `remark-slug` 插件为 markdown 中的标题添加了自定义的 `slug`,然后在 `MyMarkdown` 组件中将 `slug` 赋值给了标题节点的 `id` 和 `data-id` 属性。最后,我们将生成的导航栏和 markdown 内容渲染了出来。 需要注意的是,`data-id` 属性并非标准的 HTML 属性,如果你需要使用这个属性来进行一些操作,可能需要自己编写相应的 JavaScript 代码来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任澄翊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值