一、实现方式
首先还是引入依赖,毕竟手写菜单元素有点蛋疼
import 自定义菜单 from 'siyuan-noob/customMenu/index.js' import 核心api from "siyuan-noob/utilKernel/kernelApi.js"
然后像思源笔记折腾记录 - 嵌入块批量操作 - 批量删除 - 链滴 (ld246.com)
里面的一样,我们注册一个菜单项给嵌入块
自定义菜单.块标菜单.注册自定义菜单项({ id:"嵌入块批量移动文档", 文字:"批量移动所在文档为子文档", 判定函数:()=>{ return 自定义菜单.块标菜单.菜单状态.当前块类型=='NodeBlockQueryEmbed' && !document.querySelectorAll( `div[data-node-id="${自定义菜单.块标菜单.菜单状态.当前块id}"]` )[1] }, 点击回调函数:(e)=>{ let 当前块元素 = document.querySelector(`[data-node-id="${自定义菜单.块标菜单.菜单状态.当前块id}"]`) 移动嵌入块所有文档为子文档(当前块元素) } })
然后我们来实现一个移动方法:
export async function 移动嵌入块所有文档为子文档(嵌入块元素){ let 嵌入块内部元素id数组 = [] 嵌入块元素.querySelectorAll('div[data-node-id]:not([data-type="NodeBlockQueryEmbed"])').forEach( el=>嵌入块内部元素id数组.push(el.dataset.nodeId) ) let 嵌入块属性=(await 从元素获取块属性(嵌入块元素)) await 批量移动所在文档到指定块所在文档(嵌入块内部元素id数组,嵌入块属性) 嵌入块元素.querySelector( '.protyle-action__reload' ).click() }
export async function 从元素获取块属性(块元素){ let id = 块元素.dataset.nodeId let sql = `select * from blocks where id ='${id}'` return (await 核心api.sql({stmt:sql}))[0] }
然后需要实现移动所在文档了
export async function 批量移动所在文档到指定块所在文档(id数组,目标块属性){ let sql=`select path from blocks where false ` id数组.forEach( id=>{ sql =sql+`or id='${id}'` } ) let 文档路径数组=[]; (await 核心api.sql({stmt:sql})).forEach( item=>{文档路径数组.push(item.path)} ) 文档路径数组=Array.from(new Set(文档路径数组)) await 核心api.批量移动文档( { fromPaths:文档路径数组, toNotebook:目标块属性.box, toPath:目标块属性.path } ) }
这回就不加确认了,反正移动也不会出什么大问题的吧.
二、使用方法
需要依赖这个代码片段
思源笔记折腾记录 - 运行你的笔记 - 链滴 (ld246.com)
然后把这篇文章的内容剪藏到你的思源笔记里面就可以用了哒
这个是我的爱发电账号,如果觉得这个对你有用可以考虑请我们喝一杯咖啡~~
leolee9086 正在创作一些简单的技术教程和小工具,以及设计方面内容 | 爱发电 (afdian.net)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于