今天看到知乎上有人说了一嘴这个
(3 封私信) 思源和 Obsidian 哪个更适合做笔记? - 知乎 (zhihu.com)
然后想了一下,好像可以做一下试试
生成任务列表序号()
setTimeout(生成任务列表序号,1000)
document.head.insertAdjacentHTML(
"beforeEnd",
`<style>
.protyle-wysiwyg [data-node-id].li[data-subtype="t"] .protyle-action.protyle-action--task:before {
content:var(--custom-index) ;
}
</style>`
);
async function 生成任务列表序号(){
let 任务列表元素数组 = document.querySelectorAll('.protyle-wysiwyg [data-type="NodeList"]:has([data-subtype="t"])')
任务列表元素数组.forEach(
(任务列表元素)=>{
同步生成序号(任务列表元素)
}
)
let 聚焦任务列表项元素数组 = document.querySelectorAll('.protyle-wysiwyg [data-subtype="t"]:not(.list .li)')
聚焦任务列表项元素数组.forEach(
任务列表项元素=>{
异步生成序号(任务列表项元素)
}
)
setTimeout(生成任务列表序号,1000)
}
function 同步生成序号(任务列表元素){
let 元素id= 任务列表元素.getAttribute('data-node-id')
let 任务选框数组 = 任务列表元素.querySelectorAll(`[data-node-id="${元素id}"]>div>.protyle-action.protyle-action--task`)
任务选框数组.forEach(
(任务选框,下标)=>{
任务选框.setAttribute("style", `--custom-index :"${下标+1}."`)
}
)
}
async function 异步生成序号(任务列表项元素){
let 元素id= 任务列表项元素.getAttribute('data-node-id')
let 响应 = await fetch('/api/query/sql',{
method:'post',
body:JSON.stringify({
stmt:`select * from blocks where id = (select parent_id from blocks where id ='${元素id}') `
})
})
let data = await 响应.json()
let 父块内容 = await(await fetch('/api/filetree/getDoc',{
method:'post',
body:JSON.stringify({
id:data.data[0].id,
size:102400
})
})).json()
let div = document.createElement('div')
div.innerHTML=父块内容.data.content
div.querySelectorAll('.li').forEach(
(元素,下标)=>{
if(元素.getAttribute('data-node-id')===元素id){
任务列表项元素.querySelector('.protyle-action.protyle-action--task').setAttribute("style", `--custom-index :"${下标+1}."`)
}
}
)
}
可能有些奇怪为什么不用 css 的计数器来做,其实是因为聚焦还有动态加载的时候用纯 css 来做编号会有问题,算了先就这样把,其实这个不自动刷新的话弄个按钮性能会更好。
效果就像这样:
第一个元素的编号是 2 是因为它确实是第二个,只不过是聚焦了。
上面 sql 之类绕了一大圈就是解决这个问题的。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于