typecho 给文章创建目录树

受益于 shortcode 短代码插件和泽泽短代码中目录树的显示样式,形成了自己实现添加文章目录的思路:

一、文章目录树的结构

<div id="toc"><div class="toc-left"><div class="toc-btn" type="button" onclick="changetoc()">></div></div><div class="TOC">目录树区域</div>
</div>

上面用到点击显示目录树的js代码为:

// 推拉toc
function changetoc() {var e = document.getElementById("toc");if (e.classList.contains("tocwidth")) {e.classList.remove("tocwidth");} else {e.classList.add("tocwidth");}
}

二、给文章目录树创建CSS样式

/* -----------------------------------
## 目录树 
------------------------------------*/
#toc {--toc-width: 260px;position: fixed;top: 0;/* right: 0px; */right: calc(-1 * var(--toc-width));height: 100vh;width: var(--toc-width);display: flex;flex-wrap: nowrap;justify-content: center;align-items: stretch;z-index: 5;transition: 0.5s;-webkit-transition: 0.5s; /* Safari */
}
.tocwidth {right: 0px !important;
}.toc-left {flex: 1 0 auto;display: flex;align-items: center;margin-left: -25px;margin-right: -25px;z-index: 6;
}
.toc-left .toc-btn {display: flex;justify-content: center;align-items: center;width: 50px;height: 50px;border-radius: 50%;background-color: var(--bd-main);cursor: pointer;box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.15);
}.toc {display: flex;flex-wrap: nowrap;height: auto;width: 100%;flex-direction: column;justify-content: center;background-color: var(--bd-main);box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.15);
}.toc > span {background-color: var(--bd-main);/*自定义背景色*/display: flex;justify-content: left;flex-wrap: wrap;font-size: larger;font-weight: bolder;text-align: left;padding: 10px;margin-bottom: 2px;margin-left: 20px;
}.toc ol {list-style-type: none;margin-left: 20px;padding: 0;display: -webkit-flex;display: flex;flex-direction: column;flex-wrap: nowrap;
}.toc ol li {flex: 0 0 auto;width: 100%;padding-left: 0px;
}.toc ol ol {padding-left: 5px;
}.toc li li {padding-left: 5px;
}.toc ol li a {display: block;padding: 5px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;
}.toc ol li a:hover {background-color: var(--bd-main);color: white;
}

三、在 function.php 中建立目录树实现函数


//生成目录树
function toc($content)
{$html = '';$dom =  new DOMDocument();libxml_use_internal_errors(true);$dom->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><body>' . $content . '</body>');libxml_use_internal_errors(false);$xpath = new DOMXPath($dom);$objs = $xpath->query('//h1|//h2|//h3|//h4|//h5|//h6');if ($objs->length) {$arr = [];$html = '<div class="toc"><span>目录</span>';foreach ($objs as $n => $obj) {$obj->setAttribute('id', 'TOC' . $n);handleToc($obj, $n, $arr, $html);}foreach ($arr as $n)$html .= '</li></ol>';$html .= '</div>';$html = '<div id="toc"><div class="toc-left"><div class="toc-btn" type="button" οnclick="changetoc()">></div></div>' . $html .'</div>';}return $html;
}//处理目录树
function handleToc($obj, $n, &$arr, &$html)
{$i = str_replace('h', '', $obj->tagName);$j = end($arr);if ($i > $j) {$arr[] = $i;$html .= '<ol>';} else if ($i == $j)$html .= '</li>';else if (in_array($i, $arr)) {$html .= '</li></ol>';array_pop($arr);handleToc($obj, $n, $arr, $html);return;} else {$arr = [$i];$html .= '</li>';}$html .= '<li><a href="#TOC' . $n . '">' . $obj->textContent . '</a>';
}

四、在 post.php 中调用目录树函数

<!-- 输出文章目录 -->
<?php echo toc($this->content); ?>

五、大功告成,体验效果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2807847.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习基础】一元线性回归(适合初学者的保姆级文章)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…

Linux进程【补充】

文章目录 进程概念task_struct 进程创建forkvfork写时拷贝 进程状态僵尸进程孤儿进程守护进程 进程地址空间是什么为什么怎么做 进程概念 进程是一个程序的执行实例或者是担当系统资源分配的实体。当一个程序运行时&#xff0c;被从硬盘加载到内存中&#xff0c;操作系统为每个…

Canvas学习笔记02:canvas的路径扫盲,附代码案例

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas的路径知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 一、什么是canvas路径 Canvas…

大模型 Advanced-RAG(高级检索增强生成):从理论到 LlamaIndex 实战!

最近关于检索增强生成进行了调查&#xff0c;总结了三种最近发展的范式&#xff1a; Naive RAG&#xff08;简单RAG&#xff09;Advanced RAG&#xff08;高级RAG&#xff09;Modular RAG&#xff08;模块化RAG&#xff09; 本文首先讨论这些技术&#xff0c;接着分享如何使…

数字电路 第二章—第二节(半导体二极管、三极管和MOS管的开关特性)

一、理想开关的开关特性 1、静态特性 &#xff08;1&#xff09;断开时&#xff0c;无论在多大范围内变化&#xff0c;其等效电阻&#xff0c;通过其中的电流。 &#xff08;2&#xff09;闭合时&#xff0c;无论流过其中的电流在多大范围内变化&#xff0c;其等效电阻&…

Spark大数据分析与实战笔记(第三章 Spark RDD 弹性分布式数据集-05)

文章目录 每日一句正能量第3章 Spark RDD弹性分布式数据集章节概要3.7 Spark的任务调度3.7.1 DAG的概念3.7.2 RDD在Spark中的运行流程 总结 每日一句正能量 成功的速度一定要超过父母老去的速度&#xff0c;努力吧。做事不必与俗同&#xff0c;亦不与俗异&#xff1b;做事不必令…

Mysql运维篇(六) 部署MHA--一主二从部署

MAH架构图 一、上传MySQL软件 1、同步MySQL软件 [rootmysql01 ~]# ls -lrt total 626112 -rw-r--r--. 1 root root 641127384 Jan 30 15:13 mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -rw-------. 1 root root 1697 Feb 3 12:09 anaconda-ks.cfg -rw-r--r--. 1 root…

[SpringDataMongodb开发游戏服务器实战]

背景&#xff1a; xdb其实足够完美了&#xff0c;现在回想一下&#xff0c;觉得有点复杂&#xff0c;我们不应该绑定语言&#xff0c;最好有自己的架构思路。 七号堡垒作为成功的商业项目&#xff0c;告诉我&#xff1a;其实数据是多读少写的&#xff0c;有修改的时候直接改库也…

推荐一个 Obsidian 的 ChatGPT 插件

源码地址&#xff1a;https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容&#xff0c;以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT&#xff0c;还提供了优…

Python staticmethod函数

Python是一种功能强大且灵活的编程语言&#xff0c;具有许多特性和功能&#xff0c;其中之一就是staticmethod函数。staticmethod函数是Python中用于定义静态方法的一种特殊装饰器。在本文中&#xff0c;将深入探讨staticmethod函数的用法、优势以及与其他方法类型的比较。 什…

【力扣 - 将有序数组转化为二叉搜索树】

题目描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 题解 前言 二叉搜索树的中序遍历是升序序列&a…

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…

Arduino中安装ESP32网络抽风无法下载 暴力解决办法 python

不知道什么仙人设计的arduino连接网络部分&#xff0c;死活下不下来。&#xff08;真的沙口&#xff0c;第一次看到这么抽风的下载口&#xff09; 操作 给爷惹火了我踏马解析json选zip直接全部下下来 把这个大家的开发板管理地址下下来跟后面python放在同一目录下&#xff0c…

FDTD算法总结

计算电磁学(Computational Electromagnetics, CEM)是通过数值计算来研究电磁场的交叉学科。 数值求解电磁学问题的方法可以分成频域(Frequency Doamin, FD)、时域(Time Domain, TD)等两类。 频域法基于时谐微分&#xff0c;通过对多个采样值的傅里叶逆变换得到所需的脉冲响应…

构建高效教学平台系统:关键要素与最佳实践

随着在线教育的迅速发展&#xff0c;教学平台系统成为了教育行业不可或缺的一部分。本文将总结构建高效教学平台系统的关键要素&#xff0c;并介绍最佳实践&#xff0c;以帮助教育机构和企业打造具有竞争力的教学平台系统。 引言&#xff1a; 随着信息技术的不断进步和普及&…

神经网络系列---分类度量

文章目录 分类度量混淆矩阵&#xff08;Confusion Matrix&#xff09;&#xff1a;二分类问题二分类代码多分类问题多分类宏平均法:多分类代码多分类微平均法&#xff1a; 准确率&#xff08;Accuracy&#xff09;&#xff1a;精确率&#xff08;Precision&#xff09;&#xf…

K8s安全一

Kubernetes是一个开源的&#xff0c;用于编排云平台中多个主机上的容器化的应用&#xff0c;目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制。其核心的特点就是能够自主的管理容器来保证云平台中的…

值得推荐收藏的5款顶级免费数据恢复软件!

今天分享5个超级简单又适合电脑小白的恢复删除的文件的恢复方法&#xff01; 在我们的日常生活中&#xff0c;偶尔会因为误删除或者清空回收站等原因导致数据丢失。对于电脑小白来说&#xff0c;这或许是一个非常棘手的问题。但是&#xff0c;不用太担心&#xff0c;今天我为大…

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C那些事儿 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

模型上下文长度达到10000000,又一批创业者完蛋了?

没有疑问&#xff0c;Gemini 1.5 Pro的隆重推出被Sora抢了风头。 社交平台X上OpenAI介绍Sora的第一条动态&#xff0c;现在已经被浏览了超过9000万次&#xff0c;而关于Gemini 1.5 Pro热度最高的一条&#xff0c;来自谷歌首席科学家Jeff Dean&#xff0c;区区123万人。 或许J…