思源笔记折腾记录 - 标题的连续编号

本贴最后更新于 911 天前,其中的信息可能已经事过境迁

啊 做这个的原因跟思源笔记折腾记录 - 任务列表的序号 - 链滴 (ld246.com)一样,还是为了绕开动态加载时的限制。

效果就像这样

image.png

image.png

首先我们需要获取全部的打开的文档,这里用面包屑来获取:

async function 生成标题序号() { let 文档面包屑数组 = document.querySelectorAll( ".protyle-breadcrumb__bar span:first-child[data-node-id]" ); 文档面包屑数组.forEach((文档面包屑元素) => { let 文档id = 文档面包屑元素.getAttribute("data-node-id"); 生成文档内标题序号(文档id); }); setTimeout(生成标题序号, 1000); }

然后我们通过文档的实际全篇内容,绕开动态加载来计算章节号。

先获取文档内容:

let 文档内容 = await noobApi.核心api.getDoc({ id: 文档id, size: 102400 }); let 临时元素 = document.createElement("div"); 临时元素.innerHTML = 文档内容.content;

这里把获取到的内容弄到一个临时元素里,方便直接用 css 选择器来鼓捣。

放心不渲染出来的话好像不怎么占用资源。

然后就是生成标题序号了:

let 标题元素数组 = 临时元素.querySelectorAll( '[data-type="NodeHeading"]:not( [data-type="NodeBlockQueryEmbed"] div)' ); let 计数器 = [0, 0, 0, 0, 0, 0]; let 上一个标题级别 = 1; for (let i = 0; i < 标题元素数组.length; ++i) { let 当前标题级别 = parseInt( 标题元素数组[i].getAttribute("data-subtype").replace("h", "") ); if (当前标题级别 <= 上一个标题级别) { for (let j = 0; j < 计数器.length; ++j) { if (j + 1 > 当前标题级别) { 计数器[j] = 0; } } } 计数器[当前标题级别 - 1] += 1; let 标题id = 标题元素数组[i].getAttribute("data-node-id"); 上一个标题级别 = 当前标题级别 + 0; } }

最后把这些东西都弄到文档里,就是完整的计数函数了:

async function 生成文档内标题序号(文档id) { let 文档内容 = await noobApi.核心api.getDoc({ id: 文档id, size: 102400 }); let 临时元素 = document.createElement("div"); 临时元素.innerHTML = 文档内容.content; let 标题元素数组 = 临时元素.querySelectorAll( '[data-type="NodeHeading"]:not( [data-type="NodeBlockQueryEmbed"] div)' ); let 计数器 = [0, 0, 0, 0, 0, 0]; let 上一个标题级别 = 1; for (let i = 0; i < 标题元素数组.length; ++i) { let 当前标题级别 = parseInt( 标题元素数组[i].getAttribute("data-subtype").replace("h", "") ); if (当前标题级别 <= 上一个标题级别) { for (let j = 0; j < 计数器.length; ++j) { if (j + 1 > 当前标题级别) { 计数器[j] = 0; } } } 计数器[当前标题级别 - 1] += 1; let 标题id = 标题元素数组[i].getAttribute("data-node-id"); document .querySelectorAll(`.protyle-wysiwyg div[data-node-id='${标题id}']`) .forEach((一级标题元素) => { 一级标题元素 .querySelector('[contenteditable="true"]') .setAttribute( "style", `--custom-index:"${序号设置.默认设置[当前标题级别 - 1]( 计数器[当前标题级别 - 1] )} "` ); }); document .querySelectorAll(`.sy__outline [data-node-id="${标题id}"]`) .forEach((大纲项目) => { 大纲项目.setAttribute( "style", `--custom-index:"${序号设置.默认设置[当前标题级别 - 1]( 计数器[当前标题级别 - 1] )} "` ); }); 上一个标题级别 = 当前标题级别 + 0; } }

还是一样的 不过这回我里面有一个地方因为不想文件太长用到了 noobApi,自己换成对应的接口调用应该就可以了。

let 文档内容 = await noobApi.核心api.getDoc({ id: 文档id, size: 102400 });

相当于:

let 响应 = await ( await fetch("/api/filetree/getDoc", { method: "post", body: JSON.stringify({ id: data.data[0].id, size: 102400, }), }) ).json(); let 父块内容 = 响应.data.content;

可以自己改一下嗷

其实任务列表序号可以改成用类似的方法生成,不过暂时懒得做了。

还有用属性设置序列样式,也暂时懒得做了。


链接:https://pan.baidu.com/s/12CKtZeJTBOF8vOxd4XooQA?pwd=rb3u
提取码:rb3u
--来自百度网盘超级会员 V5 的分享

整个代码片段的仓库在

leolee9086/snippets (github.com)

就是这样嗷

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26926 引用 • 112342 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 对了 里面有个序号设置 每一个设置是一个数组 从第一项到第六项(我才不说 0 到 5)trollface 分别就是一到六级标题的计算方法,看得懂的话可以改成自己想要的样式。

  • yjmsiyuan

    先赞为敬!

    最好办法是:在顶栏设置按钮,对当前文档生效即可。

    看那位大侠去完善。

  • 看不懂,先收藏点赞为敬 ❤️

  • yinyon

    请问怎样调用呢?我是小白。。。。

推荐标签 标签

  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 838 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 543 回帖 • 7 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26926 引用 • 112340 回帖 • 1 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 689 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    59 引用 • 25 回帖 • 2 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 1 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 690 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 14 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1128 回帖 • 110 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 71 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 677 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    188 引用 • 319 回帖 • 240 关注
  • 分享

    有什么新发现就分享给大家吧!

    249 引用 • 1799 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 836 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 616 关注
  • abitmean

    有点意思就行了

    38 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 662 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖 • 1 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖 • 1 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 41 关注