你应该会基础的检索功能吧,dv.pages(``)里填的和dataview功能的from是一样的东西
let files = dv.pages(`"100-Index/150-卡片"`)
dv.table(
['文件','内容'],
await Promise.all(files.map(async(p)=>{
let c=await app.vault.readRaw(p.file.path)
return [p.file.link,c]}))
)
你应该会基础的检索功能吧,dv.pages(``)里填的和dataview功能的from是一样的东西
let files = dv.pages(`"100-Index/150-卡片"`)
dv.table(
['文件','内容'],
await Promise.all(files.map(async(p)=>{
let c=await app.vault.readRaw(p.file.path)
return [p.file.link,c]}))
)
感谢大佬,不过有点卡,可能是因为我的文件数量太多了(63个)。我在琢磨一下看看有没有别的办法吧,感觉聚合大量内容太难了
有点卡啊,那这样呢
let files = dv.pages(`"100-Index/150-卡片"`)
dv.table(
['文件','内容'],
await Promise.all(files.map(async(p)=>{
let c=await app.vault.cachedRead(app.vault.getAbstractFileByPath(p.file.path))
return [p.file.link,c]}))
)
奇怪,我测试了一下,另一个145个文件的文件夹不卡,而这个64的贼卡。我先排除一下看看是不是这个文件夹里面哪个文件有问题
哦,我知道了,我用了folder note,然后我在这个文件夹的folder note里面启用了这个dataviewjs,然后结果就是我想显示这个文件夹下的所有文件的话,会把folder note这个页面也显示进去,循环往复越来越卡 换个地方显示就好了,感谢大佬
大佬,刚忽然有个想法,不知道能不能实现。下面是我自己写的读书笔记统计,有没有办法,点击下面的图片跳转笔记呢?默认只能点击图片上面的标题才能跳转,点击图片就变成了看源码了,这么大的空间白白浪费了。附上代码:
[!success]+ 已读
Table
(“![|50](” + cover + “)”) as “封面”, author as “作者”,updated as “修改”
From “1.索引/Book”
Where icontains(status,“已读”)
sort updated desc
这个比较麻烦,插件里基本没有直接的功能实现,但是可以用前端的方法硬凑出来。
let files = dv.pages(`"1.索引/Book"`).filter(p=>p.status.includes('已读'))
let m=files.map(p=>{
let a=dv.paragraph("![|50](" + p.cover + ")")
a.onclick=(e)=>{
if(e.ctrlKey)
app.workspace.getLeaf('tab').openFile(app.vault.getAbstractFileByPath(p.file.path))
else
app.workspace.getMostRecentLeaf().openFile(app.vault.getAbstractFileByPath(p.file.path))
}
return [a,p.author,p.updated]
})
dv.table(['cover','a','u'],m)
第一行后面换成这样p.status?.includes试试
成功了!!!大佬你这水平我感觉都可以开个课去卖,完全没得问题
大神,如果我想要dataviewjs,在一个不确定文件夹下面,获取出所有的未完成任务列表(不包含有些是空的任务),获取出的列表要有链接,请问可以实现么?
啥叫不确定文件夹,都不确定是哪个文件夹怎么获取
我会定义一个文件夹,const一下,主要是获取不包含空值,并且列表要有链接,这里一直搞不定
确定是列表吗,dvjs获取的任务自带链接,但是单纯的列表没有,需要一点花活
我自己获取出来的任务,都带上了note的名字,我就只需要单纯把所有任务,直接排列就好了,不需要note的名字
const folder = ''
let files = dv.pages(`"${folder}"`)
dv.taskList(files.file.tasks.filter(p=>!p.completed && p.text!=''))
我尝试了一下一个简单的方法,不需额外的代码实现。只需要把dataview的代码换成:
("[![|50]("+cover+ ")](<"+file.name+">)") as "封面"
ob自动把[](文件名)
识别成内链,且()
内容不显示,dataview刚好可以给到file.name参数。
大佬太强了,学到好多)
我有一个需求是汇总所有日记(全部放在"02-Daily Notes"文件夹内)中指定二级标题下的所有三级标题。比如对于某日记date.md如下:
## [[Project 1]]
### job 1
...
### job 2
...
## [[Project 2]]
### work 1
...
### work 2
...
我希望当我给定Project 1,能够仅提取job 1和job 2(不包括其他正文和次级标题内容),最后能汇总到类似下面格式的表格中:
文件名 job
date.md - job 1
- job2
date2.md -job
...
看了很多帖子感觉dataviewjs是可以实现的,但大概是自己前端实在太菜,别人的代码拿来一改就不行了TUT,折腾了好多天都没什么结果,还望大佬赐教)
dataviewjs确实可以实现,要放在以前,我肯定会用正则硬去匹配标题,但是现在我发现ob其实可以直接获取文件对应的标题
let files = dv.pages(`"02-Daily Notes"`)
let targetHeader = '[[Project 1]]'
let headers = files.map(p => {
let tf = app.vault.getAbstractFileByPath(p.file.path)
let header = app.metadataCache.getFileCache(tf)
.headings
if (!header) return
let h = []
let b = false
for (let i of header) {
if (b && i.level == 3) h.push(i.heading)
if (b && i.level == 2) b = false
if (i.heading == targetHeader && i.level == 2) b = true
}
return h.length == 0 ? false : [p.file.link, h]
})
.filter(p => p)
dv.table(['file', 'headers'], headers)
啊确实,我就是一直在改正则,出各种问题……原来可以提取出来,多谢大佬!