博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【前端markdown】markdown 提取目录 增加用户体验
阅读量:7139 次
发布时间:2019-06-28

本文共 3510 字,大约阅读时间需要 11 分钟。

思路

首发
根据markdown生成的html,二级标题,和三级标题的标志:h2 h3标签提取.
利用锚点加入a标签可以点击跳转到id,实现提取目录跳转。

参考 vue doc

实战

本篇教程只提取二级标签,后续会优化,请持续关注

结果

提取标签

获取dom

let content = this.$refs.content;// 提取h2标签let headers = content.querySelectorAll('h2')let each = [].forEachlet str = document.createElement('ul')each.call(headers, function (h) {  str.appendChild(self.makeLink(h))})makeLink 函数做的事情,添加a标签返回 字符串domreturn str.innerHTML

makeLink 转换成a标签函数

function makeLink (h) {  var link = document.createElement('li')  window.arst = h  var text = [].slice.call(h.childNodes).map(function (node) {    if (node.nodeType === Node.TEXT_NODE) {      return node.nodeValue    } else if (['CODE', 'SPAN'].indexOf(node.tagName) !== -1) {      return node.textContent    } else {      return ''    }  }).join('').replace(/\(.*\)$/, '')  link.innerHTML =    '' +      htmlEscape(text) +    ''  return link}

vuejs 全部

mounted(){     this.sectionContainer = this.getContent()   },   methods: {     getArticleList() {       var params = {         id: this.id       };       this.$http.get('/articles/desc', {         params       }).then((res) => {         this.article = res.data;       })     },     handleCurrentChange(val) {       this.page = val;       this.getArticleList();       this.$router.replace({         path: `/blog/${val}`       })     },     makeLink (h) {       var link = document.createElement('li')       window.arst = h       var text = [].slice.call(h.childNodes).map(function (node) {         if (node.nodeType === Node.TEXT_NODE) {           return node.nodeValue         } else if (['CODE', 'SPAN'].indexOf(node.tagName) !== -1) {           return node.textContent         } else {           return ''         }       }).join('').replace(/\(.*\)$/, '')       link.innerHTML =         '' +           this.htmlEscape(text) +         ''       return link     },      htmlEscape (text) {     return text       .replace(/&/g, '&')       .replace(/"/g, '"')       .replace(/'/g, ''')       .replace(//g, '>')   },     collectH3s (h) {     var h3s = []     var next = h.nextSibling     while (next && next.tagName !== 'H2') {       if (next.tagName === 'H3') {         h3s.push(next)       }       next = next.nextSibling     }     return h3s   },     getContent(){       var self = this       var sectionContainer       var each = [].forEach       // 获取dom       var content = this.$refs.content;       // 提取h2标签       var headers = content.querySelectorAll('h2')       sectionContainer = document.createElement('ul')       each.call(headers, function (h) {         sectionContainer.appendChild(self.makeLink(h))       })       return  sectionContainer.innerHTML     }   }

原生js

var sectionContainersectionContainer = document.createElement('ul')var each = [].forEachvar content = document.querySelector('.content')var headers = content.querySelectorAll('h2')each.call(headers, function (h) {   sectionContainer.appendChild(makeLink(h)) }) function makeLink (h) {   var link = document.createElement('li')   window.arst = h   var text = [].slice.call(h.childNodes).map(function (node) {     if (node.nodeType === Node.TEXT_NODE) {       return node.nodeValue     } else if (['CODE', 'SPAN'].indexOf(node.tagName) !== -1) {       return node.textContent     } else {       return ''     }   }).join('').replace(/\(.*\)$/, '')   link.innerHTML =     '' +       htmlEscape(text) +     ''   return link } function htmlEscape (text) {   return text     .replace(/&/g, '&')     .replace(/"/g, '"')     .replace(/'/g, ''')     .replace(//g, '>') }

转载地址:http://eomrl.baihongyu.com/

你可能感兴趣的文章
删除多个附件
查看>>
目标检测之显著区域检测---国外的一个图像显著区域检测代码及其效果图 saliency region detection...
查看>>
Laravel之路——事务
查看>>
WCF分布式开发步步为赢(10):请求应答(Request-Reply)、单向操作(One-Way)、回调操作(Call Back)....
查看>>
python的struct模块
查看>>
python进程和线程中的两个锁
查看>>
Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库
查看>>
(最小生成树 次小生成树)The Unique MST -- POJ -- 1679
查看>>
括号匹配(二) -- 经典动态规划
查看>>
在jsp中的css
查看>>
Java代理(三)
查看>>
intent.setFlags方法中的参数值含义
查看>>
Android GridView属性集合2
查看>>
加载静态文件,父模板的继承和扩展
查看>>
新的一个月,就这么不知不觉的来临了
查看>>
centos7.4之zabbix4.0的fping监控
查看>>
python基础知识 ~ 函数补充与反射
查看>>
xss攻击
查看>>
[CC-ANUCBC]Cards, bags and coins
查看>>
Riemann-Stieltjes积分存在的充分条件(按照Tom M.Apostol的《数学分析》上的定义)
查看>>