如题,我希望能隐藏所有文档里面已完成的任务块,最好能有便捷的开关在主界面,方便随时切换。希望大佬提供代码片段,感谢
相关帖子
-
wilsons •付费者 捐赠者
用下面的 css 隐藏所有已完成任务
[data-type="NodeListItem"][data-subtype="t"].protyle-task--done{ display:none; }
然后,配合插件 quickSnippets 就可以了吧
-
用下面的 css 隐藏所有已完成任务
[data-type="NodeListItem"][data-subtype="t"].protyle-task--done{ display:none; }
然后,配合插件 quickSnippets 就可以了吧
1 回复 -
或者安装 Run JS 插件
然后在任意文档中,插入 js 代码块,然后在代码块中输入以下代码
// 隐藏所有已完成任务 async function main() { // css 代码 const styleContent = ` [data-type="NodeListItem"][data-subtype="t"].protyle-task--done { display: none; } `; // 定义 style 的内容 const styleId = "ShowOrHideAllDoneTask"; // 获取现有的 <style> 元素 let styleElement = document.getElementById(styleId); if (styleElement) { // 如果存在,则删除它 styleElement.remove(); await client.pushMsg({ msg: "已隐藏", timeout: 3000, }); } else { // 如果不存在,则创建并添加它 const newStyle = document.createElement("style"); newStyle.id = styleId; newStyle.textContent = styleContent; document.head.appendChild(newStyle); await client.pushMsg({ msg: "已显示", timeout: 3000, }); } } main(); plugin.saveAction(thisBlock.id, "隐藏所有已完成任务");
然后,在右键中运行下代码即可,如下图
然后,在顶栏即可快速切换了
1 回复 -
有 bug 耶,无法保存显示隐藏状态,刷新显示状态就没了。
解决办法:
1 把之前的代码块代码改成这个
// 隐藏所有已完成任务 async function main() { // css 代码 const styleContent = ` [data-type="NodeListItem"][data-subtype="t"].protyle-task--done { display: none; } `; // 定义 style 的内容 const styleId = "ShowOrHideAllDoneTask"; // 判断是否加载 const isLoading = args.includes('load'); // 获取存储状态 let status = await api.getFile('/data/storage/'+styleId+'.json'); if(!status || status.code === 404) { status = 'show'; } else { status = status.status || 'show'; } if(!isLoading) status = status === 'show' ? 'hide' : 'show'; if (status === 'show') { // 获取现有的 <style> 元素 let styleElement = document.getElementById(styleId); // 如果存在,则删除它 if(styleElement) styleElement.remove(); if(!isLoading){ await client.pushMsg({ msg: "已显示完成的任务", timeout: 3000, }); await api.putFile('/data/storage/'+styleId+'.json', false, new Blob(['{"status":"show"}'])); } } else { // 如果不存在,则创建并添加它 const newStyle = document.createElement("style"); newStyle.id = styleId; newStyle.textContent = styleContent; document.head.appendChild(newStyle); if(!isLoading){ await client.pushMsg({ msg: "已隐藏完成的任务", timeout: 3000, }); await api.putFile('/data/storage/'+styleId+'.json', false, new Blob(['{"status":"hide"}'])); } } } main(); plugin.saveAction(thisBlock.id, "显示/隐藏所有已完成任务");
2 给 js 代码块命名为 ShowOrHideAllDoneTask
3 把代码块保存为可调用方法
4 添加新的 js 代码片段(注意是设置/外观/代码片段,不是编辑器里的代码块),代码片段中输入以下代码即可
runJs.plugin.call('ShowOrHideAllDoneTask', 'load')
好滴,不说都没发现5kyfkr •@5kyfkr 注意,第 4 步一般情况下没有问题,如果频繁失效的话,可以用这段代码放到 js 代码片段中 https://pipe.b3log.org/blogs/wilsons/articles/2025/04/01/1743459076732#toc_h2_6 然后把其中的 runJs.siyuan.showMessage("Hello!");换成 runJs.plugin.call('ShowOrHideAllDoneTask', 'load')即可。wilsons •