在富文本辑编器里面写文章时,我们通常会使用h1-h6标签来定义章节标题。在用户端显示时希望展示目录结构。如图;

这里生成目录结构可以借助第三方插件来实现,但某些情况下不希望引用太多的第三方资源就需要自己实现一个。
核心思路:拿到所有的h标签的节点集合,这个集合就是内容(平级)的目录,我们只需要将平级目录根据标签的(level 等级)/大小,设定一个缩进的长度乘标签大小就可生成有层次的目录结果。为了能使用使用瞄点定位,故每个节点设定一个id
核心处理代码

 //拿到文章内容的节点let parent = document.getElementById("previewer")//拿到文章里面的h1-h6标签let doms = parent.querySelectorAll('h1,h2,h3,h4,h5,h6');let hEles = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']//结果集let catalogue = [];let index = 0;if(doms.length>0){doms.forEach(element => {var nodetext = element.innerHTML.replace(/<\/?[^>]+>/g, "");nodetext = nodetext );let name = element.nodeName.toLowerCase();if (hEles.includes(name)) {index++;let id = `catalogue_${index}`;//为当前节点添加id,方便使用瞄点定位element.setAttribute("id", id)let level = name.replace("h", "");catalogue.push({ id: id, key: name, title: nodetext, level: Number(level) });}});

以下是vue版本的实现

let data = reactive({ news: {}, loading: true, catalogue: [] })const { proxy } = getCurrentInstance()let id = proxy.$root.$router.currentRoute.value.params.idonMounted(() => {proxy.$http.get(`/api/blog/news/${id}`).then((res) => {data.news = res;document.title = res.title;});})nextTick(() => {setTimeout(() => {//等待dom 加载完成uParse("#previewer", {rootPath: 'https://cdn.jsdelivr.net/gh/t-jian/static/theme/ueditor-1.4.3/',liiconpath: 'https://cdn.jsdelivr.net/gh/t-jian/static/theme/ueditor-1.4.3/listicon/',});setTimeout(() => {//防止闪烁data.loading = false;//目录导航let parent = document.getElementById("previewer")let doms = parent.querySelectorAll('h1,h2,h3,h4,h5,h6');let hEles = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']let catalogue = [];let index = 0;if(doms.length>0){doms.forEach(element => {var nodetext = element.innerHTML.replace(/<\/?[^>]+>/g, "");nodetext = nodetext.replace(/&nbsp;/ig, "");let name = element.nodeName.toLowerCase();if (hEles.includes(name)) {index++;let id = `catalogue_${index}`;element.setAttribute("id", id)let level = name.replace("h", "");catalogue.push({ id: id, key: name, title: nodetext, level: Number(level) });}});data.catalogue = catalogue;}}, 100);}, 300);
 <div class="item-card rt-panel"><div class="nav-title">文章导航</div><ul class="catalogue-box"><li v-for="item in catalogue" :key="item"><a :href="'#'+item.id"><span :style="'margin-left:'+(4*item.level)+'px;'">{{item.title}}</span> </a> </li></ul></div>

简单的生成文章内容目录(vue可用)相关推荐

  1. 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上域名绝对路径...

    今天又接了个织梦CMS的有偿服务,客户想要后台添加文章内容的时候,缩略图自动变成带上绝对路径的格式.比如我们默认的缩略图是这样的 /uploads/allimg/150814/123P2NB-0-lp ...

  2. 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上绝对路径教程...

    大家打开织梦的后台路径 默认是dede/article_add.php 和 dede/article_edit.php 两个文件一个是添加的时候,一个是编辑的时候 搜索 if(preg_match(& ...

  3. js 根据文章内容生成目录,锚点链接跳转,根据标题生成目录

    效果图: 我们都知道锚点链接的跳转是通过<a href="#t0">标题</a>和<a name="t0"></a&g ...

  4. hexo嵌入html传消息的,Hexo添加Toc支持,生成文章目录

    Hexo提供了诸多插件来增强博客体验,地址http://hexo.io/plugins/. 在博客搬迁的时发现一个生成文章目录的插件,hexo-toc. hexo-toc为防插件误认标记,文章以下出现 ...

  5. 如何在 Word 中使用自定义样式生成文章目录

    如何在 Word 中使用自定义样式生成文章目录 概要 本文介绍如何在 Microsoft Word 2002 和 Microsoft Office Word 2003 中使用自定义样式创建目录.在 W ...

  6. C++随机生成字符串,亲测可用,简单易懂

    C++随机生成字符串,亲测可用,简单易懂 话不多说,上代码.蜜汁自信注释写的很清楚,嘿嘿.第一次写文章,希望能够对大家有一丢丢的帮助吧~ #include <iostream> using ...

  7. 根据文章中H标签自动生成文章目录

    以前看到csdn上的目录结构就想把它移植到博客里,今天抽了个空从csdn上拔下了代码. js代码,复制放入到single.php页面中 <script type="text/javas ...

  8. 一个简单的文章内容管理系统(增删改查)

    目录 设计需求 源代码 连接数据库运行程序 具体展示 设计需求 用户 字段:用户名.密码 登录 不登录可以访问 成功进入文章管理列表页面,失败提示 注册 不登录可以访问 注册字段:用户名.密码.确认密 ...

  9. 帝国cms把网站文章内容生成word文档下载插件

    帝国cms把网站文章内容生成word文档下载插件 插件介绍 jQuery Word Export是一款可以将网页中的文字导出到微软Word文档中的jQuery插件.它通过FileSaver.js文件来 ...

最新文章

  1. mysql 中的事务
  2. 【深度学习】深度神经网络后处理之全连接CRFs(DenseCRF)
  3. 图解Flex开发教程
  4. isis学不到looback口的路由_使用路由器后测速达不到宽带的网速怎么办?
  5. [译]2019年修炼前端开发者之路
  6. MySQL 到底是怎么解决幻读的?
  7. Android微信界面的设计
  8. Python模块:日志输出—logging模块
  9. mac php 超时,PHP---Mac上开启php错误提示
  10. 回归指令_用一条指令在新款 Mac 上找回经典的开机启动声
  11. CentOS安装Redis、PHPredis扩展及Redis配置文件详解
  12. java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能
  13. html 文本 多列显示,CSS3文本,字体和多列
  14. 解决办法:开机后过很长时间键盘才能用
  15. 经纬度 度分秒 正则表达式
  16. CISCO技术(1.7万)
  17. HTML查看器PC,PE文件查看器(PeViewer)
  18. 2018-03-28-日剂
  19. 用gauss消去法解线性方程组(数值数学实验教程P74ex5.2)-2021-11-03
  20. windows调整窗口大小_175 Windows 7调整,提示和操作方法文章

热门文章

  1. 用Python写了个小工具,再复杂的文件夹,分分钟帮你整理!
  2. 组建隧道中转流量(自建IPLC实现落地)
  3. 微擎公众版、授权版和商业版有什么区别?如何选择?
  4. Debian9安装后的一些坑
  5. 收藏一下GPRMC的格式
  6. 将GTP格式转换成MBR格式
  7. 微信公众号/小程序errcode 错误码 大全
  8. 酷睿i7 10750H参数 i710750h核显相当于什么显卡
  9. 行业案例|世界 500 强险企如何建设指标驱动的经营分析系统
  10. 骁龙870内战:iQOO Neo5 SE和小米12X怎么选?