[js] 打开思源后默认折叠文档树

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

效果是重启打开思源或重载思源窗口后默认折叠文档树。

// 打开思源后默认折叠文档树 JS片段 // author by JeffreyChen https://ld246.com/article/1728469520911 (function() { const maxAttempts = 100; let attempts = 0; const delay = 400; // 延迟时间,单位为毫秒 const checkElement = setInterval(() => { attempts++; // 查找目标元素 const element = document.querySelector('.layout-tab-container > .file-tree .block__icon[data-type="collapse"]'); if (element) { // 如果元素存在,则模拟点击 element.click(); // 设置一个延迟后重新点击 setTimeout(() => { element.click(); // 再次点击 clearInterval(checkElement); // 停止查询 }, delay); } // 达到最大尝试次数后停止查询 if (attempts >= maxAttempts) { clearInterval(checkElement); } }, 200); })();
不得不说 AI 真方便

img

打赏 30 积分后可见
30 积分 • 6 打赏
  • 思源笔记

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

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

    26093 引用 • 108339 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    191 引用 • 1359 回帖
3 操作
JeffreyChen 在 2024-10-09 20:46:20 更新了该帖
JeffreyChen 在 2024-10-09 20:35:37 更新了该帖
JeffreyChen 在 2024-10-09 18:32:01 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • mark-j

    能不能用 js 代码运行触发思源插件的快捷键

    2 回复
  • 不一定能,浏览器对模拟按键有限制

  • mark-j

    用油猴呢?

    1 回复
  • 思源又安装不了 Chrome 插件,更没可能

  • YHXK

    用了,不管用,点启用了

    1 回复
  • 录屏演示一下重启思源,以及看看代码片段界面

    1 回复
  • YHXK
    1 回复
  • 我更新了一下帖子的代码片段,你再试试

    1 回复
  • wilsons 1 评论

    可以,可以参考 EmberSky 大佬的回复 求代码片段 | 默认全屏编辑 - HugZephyr 的回帖

    哦对,这个是可以的
    JeffreyChen
  • YHXK

    可以了,但又会导致文档树和菜单一打开秒缩起来

    1 回复
  • 我又修改了一下,这次应该行了

    1 回复
  • YHXK

    没问题了 🎉

  • Floria233

    大大,有没有办法将这两个东西改一下位置,即“关闭”和“删除”能不能别放在一块,每次点击时多少有点心惊肉跳的。总是会担心误删除之类的事——(因为笔记本很多,所以频繁经常关闭一些笔记本)

    image.png

    2 回复
  • 别担心,删除笔记本是会弹窗确认的,即使删除了也可以在 [数据历史 - 已删除的笔记本] 中立即回滚。

    1 回复
  • Floria233

    之前关掉了弹窗确认(因为总感觉有点多余——自己也知道是作死 😂,确实不喜欢弹窗确认这种东西,管理删除文档时这玩意儿会频繁跳出来烦人)

    现在则为了避免误删整个笔记本,还是开了“弹窗确认”,有点无可奈何必须捏着鼻子接受这东西的感觉。

    数据历史可以找回笔记本,我昨天逛论坛时看到,这个设计,是不是不可以恢复整个文档的层级结构?(昨天看的另一个帖子,有点迷惑)

    1 回复
    1. 这个弹窗确认的选项是只对单个文档生效的,删除笔记本是始终会弹窗的:image.png
    2. 如果你是整个笔记本直接删除的,恢复时就会恢复原本的文档结构
    1 回复
  • 删除,退出等危险按钮一律红色显示,以防看错。

    1 回复
  • Floria233

    哦哦,懂了 😄 之前没有仔细看,谢谢提醒

  • Floria233 1 评论

    我的弹窗是这样的(我太喜欢换壁纸了 😂 )

    话说这个弹窗也能改的吗?

    image.png

    1 回复
    目前倒是没有更改弹窗的需求,所以只谢谢大佬提醒,这个蓝色我可以接受。
    Floria233
  • Tisamn

    大佬01CF253F.png!!!

  • 我的意思是改右键菜单等文字颜色。当然弹窗即使有背景色,如果想醒目也可以改文字颜色嘛。

    1 回复
  • Floria233

    哦,是的,忽然想起来 ob 也是这样的设计,右键菜单中,唯有“删除文档”这个文字是红色的(依稀记得很久之前还不是这样的)

  • sswzznl 1 评论

    大佬,如果想折叠到 1 级子文档能改哪段代码来实现吗,想要保留笔记本下的 1 级子文档,折叠 1 级后面的子文档

    1 回复
    @wilsons 帮帮忙?
    JeffreyChen
  • 实现了默认展开一级菜单 @JeffreyChen

    // 打开思源后默认折叠文档树 JS片段 // author by JeffreyChen https://ld246.com/article/1728469520911 (function() { const maxAttempts = 100; let attempts = 0; const delay = 400; // 延迟时间,单位为毫秒 const checkElement = setInterval(() => { attempts++; // 查找目标元素 const element = document.querySelector('.layout-tab-container > .file-tree .block__icon[data-type="collapse"]'); if (element) { // 如果元素存在,则模拟点击(by wilsons 注释掉这个点击防止闪动) //element.click(); // 设置一个延迟后重新点击 setTimeout(() => { element.click(); // 再次点击 clearInterval(checkElement); // 停止查询 // 展开一级菜单(by wilsons) setTimeout(() => { const noteList = document.querySelectorAll('ul.b3-list[data-url]:not([data-lock-node="true"])'); noteList.forEach(item => { const li = item.querySelector('li[data-type="navigation-root"]'); if(!li) return; const arrow = li.querySelector('span.b3-list-item__toggle'); if(!arrow) return; const isOpen = arrow.querySelector('svg.b3-list-item__arrow--open'); if(!isOpen){ arrow.click(); } }); }, delay); }, delay); } // 达到最大尝试次数后停止查询 if (attempts >= maxAttempts) { clearInterval(checkElement); } }, 200); })();
    2 回复
  • 这个思路有点缺陷,会展开所有的笔记本而不是只保留那些之前就被展开的

    1 回复
  • @sswzznl 需求里没要求记住之前被展开的,这个记住要存储数据也较为麻烦。

    大家的需求千奇百怪哈,之前思源不记住要记住,现在记住了又要折叠 😄 。

    1 回复
  • JeffreyChen 1 赞同

    这个记住要存储数据也较为麻烦

    其实代码片段代替折叠按钮进行操作就行了,直接移除首层文档下的子文档列表元素。

    我在 [js] 右键文档树定位按钮时先折叠再定位 里就用的是这种方法折叠文档(学思源的,思源的折叠操作就是直接移除 DOM)。

    1 回复
  • wilsons 1 赞同

    嗯,我以为他的需求是在你的基础上实现展开一级菜单,如果不在你基础上可以,在你基础上都已经折叠了,需要展开。

  • sswzznl

    感谢 wilsons 和 jeffreyChen 大佬 😄

请输入回帖内容 ...
JeffreyChen
思源笔记同步教程:https://ld246.com/article/1692089679062 爱发电:https://afdian.com/a/JeffreyChen

推荐标签 标签

  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    24 引用 • 242 回帖
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 125 关注
  • 链书

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

    链书社

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

    14 引用 • 257 回帖 • 2 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 72 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2040 回帖
  • Word
    13 引用 • 41 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 244 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖 • 2 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 36 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    36 引用 • 200 回帖 • 34 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 18 关注
  • Maven

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

    188 引用 • 319 回帖 • 241 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 28 回帖 • 2 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖 • 2 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 661 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    372 引用 • 1857 回帖 • 1 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 1 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 33 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    201 引用 • 120 回帖
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 7 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 365 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注