可以通过 JS 代码实现鼠标中键展开文档吗?

本贴最后更新于 570 天前,其中的信息可能已经沧海桑田

在链滴看到这个帖子的回答,所以十分好奇可以通过添加 JS 代码片段的方式实现通过鼠标中键点击文档(父文档)时展开文档吗?

可以的话有会的兄弟可以帮我写一个吗,我不会写代码,也没有啥好拿得出手的,只能奉上 2000 积分求助了大家了!

不想打开链接的兄弟可以直接看图:

image.png

image.png

  • 思源笔记

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

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

    22250 引用 • 88929 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8073 引用 • 36877 回帖 • 162 关注

相关帖子

被采纳的回答
  • Undii 2 2 赞同
    // 中键点击展开:基于 https://ld246.com/article/1682476267736/comment/1682479365610?r=Undii#comments
    
    let g_reset = setInterval(main, 2000);
    
    function main() {
        if (document.querySelector('.sy__file')) {
            clearInterval(g_reset);
        }else{
            return false;
        }
        document.querySelector('.sy__file').addEventListener('mousedown', event => {
            if (event.button != 1) return;
            event.preventDefault();
            if (!event.target.classList.contains('b3-list-item__text')) return;
            if (event.target.parentNode.getAttribute("data-type") !== "navigation-file") return;
            const b3ListItemToggle = event.target.parentNode.querySelector('.b3-list-item__toggle');
            if (b3ListItemToggle.classList.contains('fn__hidden')) return;
            b3ListItemToggle.click();
        });
    }
    
    

    第三版:与第二版差不多【扩大响应范围(中键点左边的空白、:和 + 都会响应,但可能有副作用)】。应该能适合更多用户的情况。

    // 中键点击展开3:基于https://ld246.com/article/1682476267736
    (function(){
        let g_reset = setInterval(main, 2000);
    
        function main() {
            if (document.querySelector('.sy__file')) {
                clearInterval(g_reset);
            }else{
                return false;
            }
            document.querySelector('.sy__file').addEventListener('mousedown', event => {
                if (event.button != 1) return;
                let notTitleFlag = false;
                if (!event.target.classList.contains('b3-list-item__text')) notTitleFlag = true;
                let target = event.target.parentNode;
                let temp = event.target;
                //console.log("0426",event);
                for (let i = 0; i < 4 && temp; i++) {
                    if (temp?.getAttribute("data-type") == "navigation-file"
                        || temp?.getAttribute("data-type") == "navigation-root") {
                        target = temp;
                        break;
                    }
                    temp = temp?.parentNode;
                }
                //console.log("0426target", target);
                if (target?.getAttribute("data-type") == "navigation-file"
                  || target?.getAttribute("data-type") == "navigation-root") {
                    const b3ListItemToggle = target.querySelector('.b3-list-item__toggle');
                    const title = target.querySelector('.b3-list-item__text');
                    if (b3ListItemToggle.classList.contains('fn__hidden')) return;
                    event.preventDefault();
                    b3ListItemToggle.click();
                    if (event.ctrlKey) {
                        title.click();
                    }
                }
            }, true);
        }
    })();
    
    
    

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • Undii 2 2 赞同 4 评论
    // 中键点击展开:基于 https://ld246.com/article/1682476267736/comment/1682479365610?r=Undii#comments
    
    let g_reset = setInterval(main, 2000);
    
    function main() {
        if (document.querySelector('.sy__file')) {
            clearInterval(g_reset);
        }else{
            return false;
        }
        document.querySelector('.sy__file').addEventListener('mousedown', event => {
            if (event.button != 1) return;
            event.preventDefault();
            if (!event.target.classList.contains('b3-list-item__text')) return;
            if (event.target.parentNode.getAttribute("data-type") !== "navigation-file") return;
            const b3ListItemToggle = event.target.parentNode.querySelector('.b3-list-item__toggle');
            if (b3ListItemToggle.classList.contains('fn__hidden')) return;
            b3ListItemToggle.click();
        });
    }
    
    

    第三版:与第二版差不多【扩大响应范围(中键点左边的空白、:和 + 都会响应,但可能有副作用)】。应该能适合更多用户的情况。

    // 中键点击展开3:基于https://ld246.com/article/1682476267736
    (function(){
        let g_reset = setInterval(main, 2000);
    
        function main() {
            if (document.querySelector('.sy__file')) {
                clearInterval(g_reset);
            }else{
                return false;
            }
            document.querySelector('.sy__file').addEventListener('mousedown', event => {
                if (event.button != 1) return;
                let notTitleFlag = false;
                if (!event.target.classList.contains('b3-list-item__text')) notTitleFlag = true;
                let target = event.target.parentNode;
                let temp = event.target;
                //console.log("0426",event);
                for (let i = 0; i < 4 && temp; i++) {
                    if (temp?.getAttribute("data-type") == "navigation-file"
                        || temp?.getAttribute("data-type") == "navigation-root") {
                        target = temp;
                        break;
                    }
                    temp = temp?.parentNode;
                }
                //console.log("0426target", target);
                if (target?.getAttribute("data-type") == "navigation-file"
                  || target?.getAttribute("data-type") == "navigation-root") {
                    const b3ListItemToggle = target.querySelector('.b3-list-item__toggle');
                    const title = target.querySelector('.b3-list-item__text');
                    if (b3ListItemToggle.classList.contains('fn__hidden')) return;
                    event.preventDefault();
                    b3ListItemToggle.click();
                    if (event.ctrlKey) {
                        title.click();
                    }
                }
            }, true);
        }
    })();
    
    
    
    3 回复
    2 操作
    Undii 在 2023-04-30 22:21:55 更新了该回帖
    Undii 在 2023-04-26 22:13:57 更新了该回帖
    谢谢,但是我添加 JS 片段后似乎无法成功,不知道我哪里做错了。
    EberhardLin
    @EberhardLin 可以打开开发者工具(ctrl+shift+i)-> 控制台(console),截下屏看看有没有红色的报错吗?
    Undii
    @EberhardLin 我加入代码片段后可以用中键打开笔记了。你会不会是代码片段末尾的文字没删掉,思源复制到外部会带几行说明文字,会不会是那个导致的报错?
    Gaffey
    @Gaffey 没我在粘贴的时候留意到了,但是我有个 CSS 代码片段,我把他关闭再试试。
    EberhardLin
  • 其他回帖
  • Undii 2 1 赞同 2 评论

    感谢录屏演示!这个像是没有捕捉到中键点下的事件。(PS.正常的话,这个代码片段应该会输出两条消息)

    图片.png

    方便的话,麻烦再试最后一次,(这个版本使用事件捕捉。还不行的话大概我就无能为力了):

    // 中键点击展开3:基于https://ld246.com/article/1682476267736
    (function(){
        let g_reset = setInterval(main, 2000);
    
        function main() {
            if (document.querySelector('.sy__file')) {
                clearInterval(g_reset);
            }else{
                return false;
            }
            document.querySelector('.sy__file').addEventListener('mousedown', event => {
                if (event.button != 1) return;
                let notTitleFlag = false;
                if (!event.target.classList.contains('b3-list-item__text')) notTitleFlag = true;
                let target = event.target.parentNode;
                let temp = event.target;
                console.log("0426",event);
                for (let i = 0; i < 4 && temp; i++) {
                    if (temp?.getAttribute("data-type") == "navigation-file"
                        || temp?.getAttribute("data-type") == "navigation-root") {
                        target = temp;
                        break;
                    }
                    temp = temp?.parentNode;
                }
                console.log("0426target", target);
                if (target?.getAttribute("data-type") == "navigation-file"
                  || target?.getAttribute("data-type") == "navigation-root") {
                    const b3ListItemToggle = target.querySelector('.b3-list-item__toggle');
                    const title = target.querySelector('.b3-list-item__text');
                    if (b3ListItemToggle.classList.contains('fn__hidden')) return;
                    event.preventDefault();
                    b3ListItemToggle.click();
                    if (event.ctrlKey) {
                        title.click();
                    }
                }
            }, true);
        }
    })();
    
    经过测试,发现可以正常使用了!并且控制台也确实在每次中键展开文档时给出两条信息,完美实现了我想要的功能,太感谢了!
    EberhardLin 1
    可以的话,麻烦你把这一版代码更新到我采纳的回帖里吧,让有需要的人可以看到。我本想重新编辑该帖,但发现积分只能增加,积分没那么多,只能麻烦大佬你了!
    EberhardLin
  • dammy 1 1 赞同 2 评论

    群里热心的 HBuilderX-Light-主题作者稻草屋老铁写了个片段,老铁你可以试试,由于我不怎么经常上链滴没找到他链滴 ID…如果在你那里有用的话也不用给我积分了,给他的主题点个 star 吧

    (() => {
        setInterval(() => {
            var listtexts = document.querySelectorAll('.sy__file .b3-list-item--hide-action');
            for (let index = 0; index < listtexts.length; index++) {
                listtexts[index].removeEventListener("mousedown", e);
                listtexts[index].addEventListener("mousedown", e)
            }
        }, 200)
    
        function e(e) {
            if (e.button != 1) return;
            try {
                e.target.previousElementSibling.previousElementSibling.click();
            } catch (error) { }
        }
    })();
    
    感谢!已点 Star!
    EberhardLin
    这个版本代码可以中键展开,不能中键收起。前面那位大佬的代码片段我也成功启用了,可以用中键展开和关闭子文档。
    Gaffey
  • EberhardLin 6 评论

    思源笔记代码片段无法中键展开文档.gif

    你看一下,鼠标点击是用鼠标中键点的,无法展开。

    麻烦试一下第二版,如果还是不行,开发者工具再看一下日志(带 0426 的输出)
    Undii
    @Undii 我看到第二版了,我现在来试,原来第一张回帖更新了,我没发现不好意思!
    EberhardLin
    @Undii 我试了,还是不行,我和你一样都是 Windows(我是 10)+v2.8.6,我现在怀疑是不是我这里有什么问题,最后怎么在开发者工具看日志呀?
    EberhardLin
    @EberhardLin 还是像之前一样,打开到控制台,过滤那里输入 0426,再中键点一下文档,看一下那里输出的东西(另外,MouseEvent 需要展开一下,确认 button、buttons(应该分别是 1,4);点 target:后面的内容,跳转到 html 结构,再截一下屏,谢谢)
    Undii
    @Undii 不好意思大佬,昨晚太晚就没注意去休息了,我今天一打开看到 dammy 分享的稻草屋老铁写的代码,随手测试了一下可以用,但是你的两个代码却失效,我现在比较怀疑是我的机子有问题,但是不好排查,如果你需要的话我可以给你录屏(开着开发者工具下测试第一版、第二版代码),十分感谢!
    EberhardLin
    @EberhardLin 应该不是电脑的问题,代码可能没考虑一些情况,方便的话麻烦录下屏幕吧,感谢
    Undii
  • 查看全部回帖

推荐标签 标签

  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 1 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 3 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 4 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 263 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 586 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 24 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 2 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 3 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 7 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 389 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 134 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 632 关注
  • VirtualBox

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

    10 引用 • 2 回帖 • 7 关注
  • 思源笔记

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

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

    22250 引用 • 88929 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 172 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 128 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖 • 1 关注
  • ngrok

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

    7 引用 • 63 回帖 • 628 关注
  • abitmean

    有点意思就行了

    31 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖 • 1 关注