[js] 有办法在思源导入的 github 的 md 文件中实现内部锚链接跳转吗

想把一个 github 的教程 md 导入思源笔记本,但是导入后发现 md 内部链接都不能跳转,不支持 github 的内部跳转语法?

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25706 引用 • 106347 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    173 引用 • 1202 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9850 引用 • 44770 回帖 • 83 关注
1 操作
wilsons 在 2025-01-09 08:02:56 更新了该帖

相关帖子

被采纳的回答

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 哪种?

    1 回复
  • simuliya

    就是 github 支持的 md 内部跳转,那个锚点

    github 的 MarkDown 中的标题直接就是一个锚点,比如说你有一个标题是 Update ,对应的 MarkDown 语法长这样:

    ### Update

    那么只需要在要跳的地方像下面这样写就可以,然后点击 “跳转到更新” 这几个字,就能跳到 Update 标题:

    [跳转到更新](#Update) // 如果标题有空格,则应该用 a 标签

    这样子

    1 回复
  • 88250

    不支持锚点链接内部跳转,仅支持跳转到原来的超链接。

  • wuwz1 1 评论

    vditor 配置 lang 为英文不生效是咋回事

    该回帖因偏离主题而被折叠
    1 操作
    88250 在 2025-01-06 19:13:36 折叠了该回帖
    请参考项目 README
    88250
  • muxue via macOS

    这种 github 的跳转是基于前端页面的 id 跳转的,思源内部的 markdown 标题是不带标题本身作为前端 id 的。

    比如我有个文字是

    <span id="jump1">内容</span>

    我就可以用下面的 markdown 语法进行跳转

    [跳转](#jump1)

    github 支持跳转是因为他会将用户的标题作为一个 href 存在某个前端页面语法里面。但是思源里面没有这么做,所以原本的跳转就失效了。

    1 回复
  • wilsons 2

    我猜,思源没这么做的原因,可能是思源有时需要动态加载,#链接对动态加载无效,所以思源就躺平了。

    不过,我用 js 实现了这个功能,原理是第一次点击时会获取这个文档的所有标题映射,然后根据映射 map 找到对应的标题 id,然后再按照思源原有逻辑跳转。

    代码如下

    https://gitee.com/wish163/mysoft/blob/main/%E6%80%9D%E6%BA%90/%E8%AE%A9%E6%80%9D%E6%BA%90%E6%94%AF%E6%8C%81%E9%94%9A%E7%82%B9%E9%93%BE%E6%8E%A5%E8%B7%B3%E8%BD%AC.js

    亦可拿到映射直接修改思源锚点地址,这里选择尽量不改变原有文档策略。

    1 回复
    1 操作
    wilsons 在 2025-01-06 22:04:48 更新了该回帖
  • simuliya

    非常感谢,使用了一下发现有一些锚点可以跳转了,但是有些锚点还是无法跳转,并且无论能否跳转,点击链接都会打开我的文件管理器

    1 回复
  • 那是锚文本不规范导致的,不妨把你的文本发过来看看,并告知哪些锚文本不能跳转。

    或者你可以试试,把锚文本改成和和标题名一摸一样的名字试试。锚文本链接前要加#

    1 回复
  • simuliya

    是的,锚文本不规范,使用#20-行-0x14 技能咏唱 可以正常跳转,但是使用#line20 就无法跳转,只能在 github 实现跳转,并且点击链接不论如何都会打开我的文件管理器

    1 回复
  • 并且点击链接不论如何都会打开我的文件管理器

    这个应该和本代码无关,你思源里的超级链接应该都会打开文件管理器。可能受到其他插件什么影响导致的。

    你可以在新空间测试试试。

    1 回复
  • simuliya 3 评论

    把所有的插件关了也会打开,我的意思就是思源原本就会这样干吧,可以实现链接为#开头的话不打开文件管理器吗

    思源本身#开头链接不会打开文件管理器,是你本地环境问题,你用全新空间试试#开头的会打开吗?如果有问题到官方 github 提 bug
    wilsons
    @wilsons 新建了一个工作空间,随便给一段话上#开头的乱写的链接还是会打开我的文件管理器呀,难道是 bug 吗
    simuliya
    还真是思源 bug, 我在 Windows 系统上重现了,不过我更新了代码,拦截了跳转,你更新下代码再试试。 @simuliya
    wilsons
  • 嗯。。。我觉得这种内部链接是一个相对复杂的问题,涉及到根目录路径、默认首页文件名、使用的绝对路径还是相对路径等问题,不能只处理链接到本文档的链接吧。Markdown 拓展 | VuePress 给的示例就有 5 种,似乎需要更复杂的处理:public/snippet/blockCustomUpdate/preinstalled/vuePress 链接转思源链接.ts · dualwind/siyuan-plugin-block-converter - 码云 - 开源中国

    1 回复
  • simuliya

    哎这个 ts 是干什么的,我把他放进 js 的代码片段没发现有什么区别,思源的代码片段不支持 ts 还是说跟我想的功能不一样

    1 回复
  • 块转换插件的代码,把块内这种错误的链接转为思源的内部链接,不过我还没加到预设里面,回头推一下新版本

请输入回帖内容 ...

推荐标签 标签

  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • OpenCV
    15 引用 • 36 回帖 • 5 关注
  • 印象笔记
    3 引用 • 16 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    67 引用 • 114 回帖 • 183 关注
  • OneNote
    1 引用 • 3 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 465 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 758 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 290 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 227 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    949 引用 • 1460 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1441 引用 • 10069 回帖 • 495 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9850 引用 • 44770 回帖 • 83 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 3 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 180 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 596 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 661 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    496 引用 • 934 回帖 • 1 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 6 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 1 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 402 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 739 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 76 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    16 引用 • 7 回帖 • 2 关注