使用 js 根据文章中h标签生成目录结构,生成树状结构

当编写长篇文章或技术文档时,为了方便读者阅读和快速导航,添加一个目录结构是一种常见的做法。在本文中,我将介绍如何使用JavaScript根据文章中的HTML标签生成一个目录结构。

准备工作

首先,我们需要一个由HTML标签组成的文章。在这个示例中,我们将使用h2-会标签来构建标题层次结构。

<div id="menu">menu</div>
<div id="article-content">
    <h2>文章目录1</h2>
    <div>文章内容1文章内容1文章内容1文章内容1</div>
    <h3>文章目录1-1</h3>
    <div>章内容1文章内容1文章内容1文章内容1</div>
    <h3>文章目录1-2</h3>
    <div>章内容1文章内容1文章内容1文章内容1</div>
    <h2>文章目录2</h2>
    <div>章内容1文章内容1文章内容1文章内容1</div>
    <h3>文章目录2-1</h3>
    <div>章内容1文章内容1文章内容1文章内容1</div>
    <h3>文章目录2-2</h3>
    <div>章内容1文章内容1文章内容1文章内容1</div>
    <h2>文章目录3</h2>
    <div>章内容1文章内容1文章内容1文章内容1</div>
    <h3>文章目录3-1</h3>
    <div>章内容1文章内容1文章内容1文章内容1</div>
</div>

生成目录结构

要生成目录结构,我们可以编辑一个JavaScript函数。以下是一个基本的实现:

function createMenu() {
  // 首先获取所有H标签,若页面中有h4,h5,h6则可以添加到参数中
  var headList = [...document.querySelectorAll("h1,h2,h3")]; // 将H标签构造成一棵树,就可以明确H标签之间的层级
  var root = {
    children: []
  };
  var h = {
    node: headList[0],
    children: [],
    parent: root
  };
  root.children.push(h);
  headList.reduce(function (pre, cur) {
    var n = {
      node: cur,
      children: []
    };
    while (h.node.localName[1] - n.node.localName[1] !== -1) {
      h = h.parent;
      if (h === root) {
        break;
      }
    }
    n.parent = h;
    h.children.push(n);
    h = n;
    return h;
  }); // 给H标签加id
  var index = 1;
  function createList(list) {
    var text = list.reduce(function (pre, cur) {
      var childText; // 判断该H标签有没有子层H标签
      if (cur.children.length) {
        childText = createList(cur.children);
      } else {
        childText = "";
      }
      cur.node.id = "header" + index++;
      pre += `<li>
                    <a href="#${cur.node.id}">
                      ${cur.node.innerHTML}
                    </a>
                    ${childText}
                  </li>`;
      return pre;
    }, "");
    var text = `<ul> ${text} </ul>`;
    return text;
  }
  var content = createList(root.children);
  document.getElementById("menu").innerHTML = content;
}
createMenu();//调用

最终效果图

以下是运行代码后的结果

js生成目录效果图文章来源地址https://www.toymoban.com/diary/js/696.html

到此这篇关于使用 js 根据文章中h标签生成目录结构,生成树状结构的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/js/696.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
解决 SVN 错误 "Could not open the requested SVN filesystem"
上一篇 2024年01月20日 01:06
JPA/Hibernate One To One在Spring Boot中的单向映射
下一篇 2024年01月21日 01:48

相关文章

  • three.js实现3d球体树状结构布局——树状结构的实现

        three.js实现3d球体树状结构布局——添加入场、出场、点击放大等动画     three-spritetext: 用来绘制文字。THREE.TextGeometry绘制文字存在模糊问题,而且转动camera时three-spritetext不需要手动处理让文字始终面向camera。     three.meshline: 用来绘制线。THREE.LineBasicMaterial绘制线存

    2024年02月08日
    浏览(52)
  • 华为OD机试 - 树状结构查询(Java & JS & Python)

    题目描述 通常使用多行的节点、父节点表示一棵树,比如 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点 输入描述 第一行输入行数,下面是多行数据,每行以空格区分节点和父节点 接着是查询节点 输出描述 输出

    2024年02月11日
    浏览(48)
  • 【数据结构】【王道】【数据结构实现】文章目录

    持续更新中。。。 数据结构 链接 顺序表实现及基本操作(可直接运行) 文章链接 无头结点单链表的实现及基本操作(可直接运行) 文章链接 带头结点单链表的实现及基本操作(可直接运行) 文章链接 双链表的实现及基本操作(可直接运行) 文章链接 循环链表的实现及

    2023年04月08日
    浏览(91)
  • 一篇文章带你了解SpringBoot目录结构

    前言 SpringBoot是整合Spring技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,是一个能够快速构建生产级别的Spring应用的工具。SpringBoot是目前流行的微服务框架,倡导“约定优于配置”,简化Spring项目搭建及开发过程。springboot提供了很多核心的功能,比如自动化配置

    2024年03月25日
    浏览(69)
  • django使用ztree实现树状结构效果,子节点实现动态加载(l懒加载)

         由于最近项目中需要实现树状结构的效果,考虑到ztree这个组件大家用的比较多,因此打算在django项目中集成ztree来实现树状的效果。最终实现的示例效果如下:         点击父节点,如果有子节点,则从后台动态请求数据,然后显示出子节点的数据。             

    2024年02月14日
    浏览(51)
  • AIGC系列文章目录 第三章 AIGC 简单易用免费的AI图像生成器: Stable Diffusion

    目前亲测体验的AI图像生成器有NovelAI、MJ和Stable Diffusion。其中, 支持免费、无限生成、超高专业级画质 的只有 Stable Diffusion 。 Stable Diffusion 由 Stable Diffusion XL 提供支持,是一款最先进的工具,可以将您的想象力变为现实。 只需点击几下和简单的文本输入,您就可以创建令人

    2024年02月03日
    浏览(67)
  • Mac 快速生成树形项目结构目录

    我这里使用的是通过包管理 Homebrew 安装形式。没有安装的话可以自行搜索 Homebrew 安装方式 直接到项目的根目录执行 tree 命令 效果如下: or : 效果如下:

    2024年02月15日
    浏览(53)
  • 【JS每N日一练】 将CSDN文章自动生成Markdown列表

    描述 作为程序员必备素质-懒,今天又给自己了一个造了个需求: 将CSDN文章自动生成Markdown列表 。 也就是把写过的文章列表,转成 标题+链接 的列表,如下图所示: 环境 版本号 描述 文章日期 2023-04-14 页面分析 打开控制台页面,很容易定位到文章列表,其内部结构如下图:

    2023年04月15日
    浏览(47)
  • Web-WebApp Vue.js 目录结构

    WebApp Vue.js 目录结构 目录解析 目录/文件 说明 build 最终发布的代码存放位置。 config 配置目录,包括端口号等。我们初学可以使用默认的。 node_modules npm 加载的项目依赖模块 src 这里是我们要开发的目录,基本上要做的事情都在这个目录里。里面包含了几个目录及文件: ass

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包