当前位置: 首页 > news >正文

Markdown中同时使用了TOC与HTML锚点后,锚点无效解决方法

Markdown中同时使用了TOC与HTML锚点后,锚点无效解决方法

  • 前言
  • 问题原因
  • 解决方案
    • 方法一
    • 方法二(不可用)
  • 补充

前言



不久才发现很多人包括我,在CSDN的Markdown中使用锚点的写法,预览的时候正常,发布后锚点失效了,点击后不能跳转了,于是查了一下是什么原因,并且解决后将解决方法记录。当然可以用ai查,但问题是它缺乏实际示例,看着头疼我才写的这篇。

锚点的作用在于可以优化页面,一会儿写操作一会儿写原理,如果内容过多,会造成混乱的问题,这时候可以用锚点把杂乱的内容、原理、解释先放到后面,操作部分只留个跳转的标题,页面一下就清爽了。



问题原因



这是由于 CSDN 的 Markdown 编辑器在预览阶段使用的是标准的 Markdown 解析器,能正确识别锚点。
CSDN 在发布文章时会对 Markdown 内容进行‌非标准解析与 HTML 渲染转换‌,会将标题内容进行‌中文转拼音、特殊字符过滤、去重处理‌,导致锚点(anchor)ID 未被正确生成或被自动重命名。



CSDN 的目录功能通过 @[TOC] 指令触发,其底层逻辑为:

  1. ‌自动扫描‌:解析文章中所有 #、##、### 等 Markdown 标题; ‌
  2. 自动生成 ID‌:为每个标题动态生成标准化锚点ID,规则为: 中文标题 → #标题文本(如 #配置代理) 英文标题 → #config-proxy(空格转连字符,小写) ‌
  3. DOM插入‌:在 @[TOC] 位置插入一个由 JavaScript 动态生成的导航列表,所有链接指向上述自动生成的 ID;
  4. 优先绑定‌:平台渲染引擎‌强制绑定标题元素的自动生成 ID‌,并‌忽略或覆盖‌用户手动添加的 id 属性。
  5. CSDN 的 TOC系统是“‌独占式锚点管理器‌”,它不兼容外部手动锚点,因为其渲染流程发生在用户内容之后,且以标题为唯一锚点源。


HTML基本格式:

-[环境设置](#section1)-[代理配置](#section2)<a id="section1"></a>## 第一节:环境配置<a id="section2"></a>## 第二节:代理设置

前面的格式是[标签内容](#要跳转的ID)<a id="section1"></a>是要给需要跳转的标签前添加id,标记位置



效果: 出现蓝色标签,点击哪个跳转哪个



以该方法测试跳转方法二

哪天这个失效了,证明CSDN的markdown又发生了变化



出现问题的原因:
[环境设置](#section1)后面的section1这个位置是个id,而不是后面要跳转的标题名称,有些人可能因为示例的演示,误解成了后面填写的内容是要跳转的标题[环境设置](#第一节:环境配置)
还有的不知道怎么用,那些标签,ID,标题名称,全部给弄成一致的了,在CSDN标准的Markdown中(预览模式)正常。但是由于CSDN发布时的转换,有可能因为是锚点ID是中文或者包含特殊字符而转换失败,并且和TOC冲突,TOC优先或者说唯一,所以设置没用



解决方案



我们的需求是使用了TOC,也要使用HTML锚点,两个都要生效。



方法一



像上面的示例一样配置即可,但注意下面的几点:

  • 标签、锚点id、要跳转的标题名称,除了ID其他不需要一致

  • 锚点ID不要是中文,不要有特殊符号,不要有空格,避免CSDN发布时转换失败

  • (#section1)这个里面是id,前面的#号一个就可,和要跳转的标签前面有几个#没有关系

  • 你设置的锚点id不要是标题的英文或各国语言翻译,要加上点别的东西或者序号等,避免和TOC转换标题后的ID恰好一致



由于你给标题前设置的ID和TOC给每个标题生成的ID不一致,就不会冲突。点击TOC的目录,会根据TOC给标题的ID进行跳转。点击你设置的蓝色标签,会找你给标题前设置的那个ID的位置



方法二(不可用)



从问题原因上我们知道了TOC会给每个标题自动生成ID,那么如果你要跳转到那个标题,将[标签内容](#要跳转的ID)这个里面的ID换成TOC自动生成的ID不就行了吗?
NO,这个平台的TOC给标题生成的ID每次是动态生成的,除非是网页同时运行一个获取TOC的标题ID的程序,并且和你自己的标签后设置的ID能互相绑定。网上有这个方法,不建议,还得平台支持运行程序,把简单的事情更复杂了。
虽然AI可以提供脚本,但是还得去别的平台发布代码,然后这边添加代码作品。只是想写个公共的文档,结果流程更复杂了,需要使用的平台更多,令人心理不适,并且莫名其妙绑定的社区太多了。



在标题下方使用<a>标签 name 的用法进行标记,对应的描点设置方法和方法一相同。
这种方法,现在测试这个平台不支持了。

[代理配置](#config2323)## 第一节:环境配置<aname="config2323"></a>


以该方法测试跳转-解决方案



补充



从F12开发者工具‌中找到TOC给每个标题生成的ID的方法


1‌、打开开发者工具‌
在任意网页中,按下 F12 键,或右键点击页面任意标题 → 选择 ‌“检查”‌(Inspect)。



‌2、定位标题元素‌

在 ‌Elements 面板‌ 中,使用快捷键 Ctrl + F(Windows)或 Cmd + F(Mac)打开搜索框,输入标题的‌中文关键词‌(如“问题解决”)或‌英文片段‌,系统将高亮匹配的 HTML 元素。



3‌、查看自动生成的 id 属性‌

TOC下的href





标签ID





http://www.jsqmd.com/news/474868/

相关文章:

  • 通义千问1.5-1.8B-Chat-GPTQ-Int4实战:自动化作业批改与个性化反馈生成
  • 2026年洗车槽生产厂家盘点!钢制洗车槽厂家/工地洗车池厂家推荐/洗车槽租赁推荐/工地洗车槽厂家推荐:宁波玖鼎领衔 - 栗子测评
  • 5分钟搞定Arduino IDE+ESP32开发环境(最新2.0.9版)
  • 当水泥浆遇上随机裂隙:COMSOL里的流动艺术
  • 2026年知名的增强剂公司推荐:防水增强剂直销厂家推荐 - 品牌宣传支持者
  • 2026年长沙天心区足疗养生品牌评测与选型指南 - 2026年企业推荐榜
  • Prius 2004永磁同步电机设计报告:包含磁路法、Maxwell有限元法建模与仿真、Mot...
  • Allegro PCB设计必备:3分钟搞定中文字体导入(附BMP2Allegro工具包)
  • 从零到一:实战加固Hadoop集群,封堵未授权访问风险
  • Google Images API 调用实战:从零开始获取图片数据的完整指南
  • 智慧铁路AI巡检数据集 铁路紧固件识别 铁路紧固件缺失识别 扣件图像识别 yolo数据集第10547期
  • MCP SDK供应链安全加固实战:SBOM自动生成+OpenSSF Scorecard评分提升至9.8分的7项CI/CD嵌入式检查点
  • 二维钻孔封孔效果模拟案例
  • ChatGLM3-6B-128K真实案例分享:万字论文摘要生成效果
  • PowerDesigner报错Cannot load the DBMS ORACLE Version 9i!Choose another one
  • 新型装载机装配图(毕业设计)
  • 基于改进A*算法的AGV路径规划算法仿真代码
  • 文墨共鸣政务场景落地:政策文件语义一致性校验工具开发实践
  • 用友U8接口开发全攻略:从EAI到OpenAPI的5种方式详解(附避坑指南)
  • 三相两电平整流器Simulink仿真探究
  • 生成24小时风速数据(每5分钟一个点)
  • 探索 S7 - 200 PLC 与组态王构建热交换站监控系统
  • 基于单例模式的基础日志库
  • GTA5初始化Social Club失败?网络诊断与加速方案全解析
  • 基于三菱PLC与组态王的兰花灌溉控制技术在农业农田的实践应用系统
  • 探索 S7 - 200 PLC 与组态王构建六层电梯控制系统
  • 《C++初阶之类和对象》【类 + 类域 + 访问限定符 + 对象的大小 + this指针】
  • 计立伟时空归一化理论体系:从螺旋几何到大一统场方程
  • QtPy(PySide6),在线程中使用QEventLoop实现低成本待机
  • Phi-3-mini-128k-instruct实操手册:vLLM推理引擎配置参数详解与最佳实践