经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是

轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:

https://github.com/jonschlinkert/markdown-toc

# 0x00 安装

TOC = Table of content , 将内容制作成导航

这个插件是基于 nodejs 的,因此需要安装 node 和 npm ,这里同样采用nvm的形式安装

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
source ~/.bashrc
nvm list-remote
nvm install v10.16.0
node -v

安装好nvm后,就可以使用npm 安装插件了

npm install --save markdown-toc

# 0x01 命令行

经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是

轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:

这个插件带Cli命令,使用帮助如下

markdown-doc [选项] <输入>

<输入>   表示需要使用 TOC 的 markdown 文件,可以通过标准输入读取

[选项]

-i 直接往 <输入> 的文件注入TOC标识符: <!-- toc -->,如果没有这个参数就输出到屏幕,不修改md文件
--json 通过json格式打印TOC
--append 在字符串的后面追加TOC
--bullets 指定需要被生成TOC项的标识符号,可以指定多个: --bullets "*" --bullets "+"
--maxdepth TOC最大深度,就是可以折叠多少层,默认6层
--no-stripHeadingTags 在强力功能前,不删去标题无关的HTML标签

# 0x02 亮点

经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是

轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:

特点:

1. 可根据自己的需求生成TOC模板

2. 对重复标题生效

3. 默认采用sane,也可以自己定制

4. 过滤器可以筛掉你不想要的标题

5. 导入期可以导入你想加入的标题

6. 可以使用强劲的函数来改变链接生成

7. 可作为 remarkable 的插件使用

很安全:

不会像其他TOC生成器一样,破坏前面的内容,或将前面的内容属性误认为标题

# 0x03 用法

经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是

轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:

var toc = require('markdown-toc');

toc('# One\n\n# Two').content;
// Results in:
// - [One](#one)
// - [Two](#two)

为了自定义输出,下面有几个属性将会返回

- content 自动生成导航导航的内容,你可以自定义样式

- highest  找到最高的等级标题,用于重新调整缩进

- tokens 可自定义的标题符号

# 0x04 API

1 - toc.plugin

作为 remarkable 插件使用,如下:

var Remarkable = require('remarkable');
var toc = require('markdown-toc'); function render(str, options) {
return new Remarkable()
.use(toc.plugin(options)) // <= register the plugin
.render(str);
}

使用实例

var results = render('# AAA\n# BBB\n# CCC\nfoo\nbar\nbaz');

2 - toc.json

可生成json格式的TOC对象

toc('# AAA\n## BBB\n### CCC\nfoo').json;

// results in
[ { content: 'AAA', slug: 'aaa', lvl: 1 },
{ content: 'BBB', slug: 'bbb', lvl: 2 },
{ content: 'CCC', slug: 'ccc', lvl: 3 } ]

3 - toc.insert

在想插入TOC的位置写上 <!-- toc --> 或者 <!--toc--> 内容 <!--tocstop-->

(使用注释作为占位符可以避免破坏原本的代码)

<!-- toc -->
- old toc 1
- old toc 2
- old toc 3
<!-- tocstop --> ## abc
This is a b c. ## xyz
This is x y z.

结果是

<!-- toc -->
- [abc](#abc)
- [xyz](#xyz)
<!-- tocstop --> ## abc
This is a b c. ## xyz
This is x y z.

4 - 通用函数

为了方便给想定制TOC的用户folk一份,插件提供了一些通用函数

  • toc.bullets(): 通过数组获取标题标记符
  • toc.linkify(): 链接到一个标题字符
  • toc.slugify(): 从标题字符中应用强力函数
  • toc.strip(): 从标题字符中去掉某些字符

例子

var result = toc('# AAA\n## BBB\n### CCC\nfoo');
var str = ''; result.json.forEach(function(heading) {
str += toc.linkify(heading.content);
});

# 0x05 选项

经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是

轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:

1 - 追加 (append)

追加一些字符串到匹配的标题标识符后面

toc(str, {append: '\n_(TOC generated by Verb)_'});

2 - 过滤 (filter)

类型: 函数

默认:  undefined

参数:

str  命中的标题字符串

ele 标题记号对象

arr 所有的标题对象

过滤掉一些极端的匹配命中的标题,如下就是一个坏标题

[.aaa([foo], ...) another bad heading](#-aaa--foo--------another-bad-heading)

为了去除这种极端的情况,可以使用过滤器筛掉

function removeJunk(str, ele, arr) {
return str.indexOf('...') === -1;
} var result = toc(str, {filter: removeJunk});
//=> beautiful TOC

3 - 强劲(slugify)

类型: 函数

默认: 默认替换掉特殊符号

例子

var str = toc('# Some Article', {slugify: require('uslug')});

4 - 符号(bullet)

类型: 字符或者数组

默认: *

就是层叠的列表符号,传入数组 ['*', '-', '+']

5 - 首项 (first1)

类型:布尔

默认: true

排除文件中的第一个h1级标题。这样可以防止自述文件中的第一个标题出现在TOC中

6 - 最大深度 (first1)

类型: 数字

默认: 6

最大深度

6 - 去除头部标签(stripHeadingTags)

类型:布尔

默认: true

去除多余的标记,类似github 的 markdown 表现

Markdown使用TOC自动生成导航栏的更多相关文章

  1. css+js实现自动伸缩导航栏

    用css+js实现自动伸缩导航栏 需要达到的效果: 默认首页选中样式 设置鼠标滑过效果:颜色变化(#f60),宽度变化,字体变化 所涉及的知识点: 布局:float css: 元素状态切换(displ ...

  2. AMScrollingNavbar框架(自动隐藏导航栏)使用简介

    AMScrollingNavbar框架是一个可以上拉隐藏导航栏和下拉显示导航栏的框架,这个开源框架的调用也很简单,本章节就给大家介绍一下这个框架的用法. 一.下载及导入框架 AMScrollingNa ...

  3. 优于 swagger 的 java markdown 文档自动生成框架-01-入门使用

    设计初衷 节约时间 Java 文档一直是一个大问题. 很多项目不写文档,即使写文档,对于开发人员来说也是非常痛苦的. 不写文档的缺点自不用多少,手动写文档的缺点也显而易见: 非常浪费时间,而且会出错. ...

  4. PHP 自动生成导航网址的最佳方法 v20130826

    经常制作开发不同的网站的后台,写过很多种不同的后台导航写法. 最终积累了这种最写法,算是最好的吧.附上截图和代码如下(PHP+HTML) <?php $linkArr = array( 'ind ...

  5. 使用Python从Markdown文档中自动生成标题导航

    概述 知识与思路 代码实现 概述 Markdown 很适合于技术写作,因为技术写作并不需要花哨的排版和内容, 只要内容生动而严谨,文笔朴实而优美. 为了编写对读者更友好的文章,有必要生成文章的标题导航 ...

  6. 第 10 篇:小细节 Markdown 文章自动生成目录,提升阅读体验

    目录 在文中插入目录 在页面的任何地方插入目录 处理空目录 美化标题的锚点 URL 作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 上 ...

  7. UIViewController的View显示在导航栏下面如何解决?

    ios7之前的版本中UIViewController中的view在显示后会自动调整为去掉导航栏的高度的,控件会自动在导航栏以下摆放. 在iOS7中UIViewController的wantsFullS ...

  8. HTML&CSS基础学习笔记1.11—导航栏

    上文我们介绍到的<a>标签,由于<a>标签可以用来跳转,所以我们可以拿<a>标签来生成网页的导航栏. 其实在实际运用中,<a>标签就经常会被用来生成导航 ...

  9. jquery tmpl生成导航

    引入<script src="jquery.tmpl.min.js"></script> html<ul class="nav" ...

随机推荐

  1. 【leetcode】610. Triangle Judgement

    原题 A pupil Tim gets homework to identify whether three line segments could possibly form a triangle. ...

  2. MySQL无法启动问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignored

    今天重启一台内网服务器,发现mysql无法正常重启,执行systemctl start mysql,报错如下 Starting LSB: start and stop MySQL... Dec 11 ...

  3. RT-Thread--内核基础

    内核介绍 内核处于硬件层之上,内核部分包括内核库.实时内核实现. 实时内核的实现包括:对象管理.线程管理及调度器.线程间通信管理.时钟管理及内存管理等等,内核最小的资源占用情况是 3KB ROM,1. ...

  4. Pycharm----设置默认脚本请求头

    每次新建py文件,均需要在文件头部加上编码声明,每次的手动添加比较麻烦,因此设置自动生成,也可添加作者.时间等等,详见如下: 设置后的样例显示: 操作方式: 操作完如上的截图步骤,再次新建一个py文件 ...

  5. VCL界面开发必备装备!DevExpress VCL v19.1.7你值得拥有

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  6. 【51nod 1340】地铁环线

    题目 有一个地铁环线,环线中有N个站台,标号为0,1,2,...,N-1.这个环线是单行线,一共由N条有向边构成,即从0到1,1到2,..k到k+1,...,N-2到N-1,N-1到0各有一条边.定义 ...

  7. P4213【模板】杜教筛(Sum)

    思路:杜教筛 提交:\(2\)次 错因:\(\varphi(i)\)的前缀和用\(int\)存的 题解: 对于一类筛积性函数前缀和的问题,杜教筛可以以低于线性的时间复杂度来解决问题. 先要构造\(h= ...

  8. P3648 [APIO2014]序列分割 斜率优化

    题解:斜率优化\(DP\) 提交:\(2\)次(特意没开\(long\ long\),然后就死了) 题解: 好的先把自己的式子推了出来: 朴素: 定义\(f[i][j]\)表示前\(i\)个数进行\( ...

  9. 001_ARM学习_六大类指令集---LDR、LDRB、LDRH、LDM、STR、STRB、STRH、STM

    以下内容为转载: 注:非常感谢博主“希望之光”,文章转自他的博客:http://blog.chinaunix.net/uid-20379123-id-1956584.html   ARM的六大类指令集 ...

  10. this绑定问题

    this是属性和方法“当前”(运行时)所在的对象.this是函数调用时发生的绑定,它的值只取决于调用位置(箭头函数除外). 函数调用的时候会产生一个执行上下文,this是对这个执行上下文的记录. ❌误 ...