dataview如何筛选标签所在行的task?

我的单个日记md文件里面有两条task

  • [ ] 测试
  • [ ] #dataview 测试

怎么筛选带 #dataview 标签的这条task?dataview不行,要用dataviewjs,不会写代码。
范围是log文件夹里的所有文件

可以改下述代码:

```dataviewjs
```
//the tag we want to search for
const tag = "#dataview"
//get all md files in vault
const files = app.vault.getMarkdownFiles()
//filter to files with the desired tag
const taggedFiles = new Set(files.reduce((acc, file) => {
    const tags = app.metadataCache.getFileCache(file).tags
    if (tags) {
      let filtered = tags.filter(t => t.tag === tag)
      if (filtered) {
        return [...acc, file]
      }
    }
    return acc
}, []))

//create an array with the filename and lines that include the desired tag
const arr = Array.from(taggedFiles).map(async(file) => {
  const content = await app.vault.cachedRead(file)
const lines = await content.split("\n").filter(line => line.includes(tag))
return [file.name, lines]
})

//resolve the promises and build the table
Promise.all(arr).then(values => {
dv.table(["file", "lines"], values)
})
```

谢谢,只是有点问题。

没有限制文件夹(不影响使用,但会影响效率吧?)
会有多余文件被选中,实际上里面并没有符合要求的内容。

```dataview
task
where !completed and contains(text, "#dataview")
1 个赞

谢谢,这个很好。

请问怎么排除某个文件?或者说限制在某个文件夹内?

请问这条代码怎么改才能用于list而不是task?直接改其中的task为list无法使用。

```query
tag: #important 
自己去研究下dataview的基本语法,或者用上面的query也行
1 个赞

query
太长的内容显示不全

dataview基本语法我看过了,倒是有dataviewjs的办法

我不太明白,你提供的那段代码中 !completed 这个条件为什么只在task类型中有效,list无效?

使用的这段语法发现一个问题
类似

- [ ] 任务1 #tag

可以被筛选出来。

但是

- [ ] 任务1
    - [ ] 小任务 #tag

这样 tag设置在二级任务里面,无法被筛选处理来,不知道有没有其他好的方法解决。