[js] 右键大纲展开,向上折叠

使用场景

右键大纲时,判断是否有下级标题,如有就展开,没有就向上折叠

视频全部鼠标右键操作,没用到左键

代码

(function () { document.addEventListener('contextmenu', function (event) { // 1. 查找当前点击的标题项 const headingItem = event.target.closest('li.b3-list-item[data-type="NodeHeading"]'); if (!headingItem) return; event.preventDefault(); event.stopPropagation(); // 辅助函数:切换当前标题的展开/折叠状态 function toggleCurrentHeading() { const toggleBtn = headingItem.querySelector('.b3-list-item__toggle:not(.fn__hidden)'); if (toggleBtn) { toggleBtn.click(); } } // 2. 检查当前标题是否有下级列表 const nextSibling = headingItem.nextElementSibling; const hasChildren = nextSibling && nextSibling.tagName === 'UL'; // 3. 检查当前标题是否有上级 const parentUL = headingItem.closest('ul'); const hasParent = parentUL && parentUL.previousElementSibling; // 4. 如果有下级列表,总是提供当前标题的展开/折叠功能 if (hasChildren) { toggleCurrentHeading(); return; // 直接返回,不执行后续操作 } // 5. 如果没有下级,执行原功能(折叠上一级标题) if (hasParent) { const parentHeading = parentUL.previousElementSibling; if (!parentHeading || !parentHeading.classList.contains('b3-list-item')) return; const parentToggleBtn = parentHeading.querySelector('.b3-list-item__toggle:not(.fn__hidden)'); if (parentToggleBtn) { parentToggleBtn.click(); } } }, true); })();

大自然的馈赠

https://ld246.com/article/174650121781

  • 思源笔记

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

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

    26479 引用 • 110131 回帖
  • 代码片段

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

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

    207 引用 • 1454 回帖
1 操作
suxiang999 在 2025-06-18 18:13:37 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...