dataviewJs
这里使用的是dataviewJs的api:
列出所有的Tag:
dv.list(new Set(dv.pages().file.tags))dv.list(new Set(dv.pages().file.tags))列出Tag数量:
var i = [dv.pages().file.etags.distinct().length]
dv.paragraph(`已发布文档中,标签共有 **${i[0]}**个。`)var i = [dv.pages().file.etags.distinct().length]
dv.paragraph(`已发布文档中,标签共有 **${i[0]}**个。`)从指定目录中查询Tag:
dv.list(new Set(dv.pages(`"目录1" or "目录2" or "目录3"`).file.tags))dv.list(new Set(dv.pages(`"目录1" or "目录2" or "目录3"`).file.tags))第三方插件中调用dataviewjs
如果是在第三方插件中调用dataviewjs, 经过测试发现,非dom操作没问题。Render相关的API不支持。
// 非dom操作没问题
var i = dv.pages().file.etags.distinct();
i.values;
// dom操作 paragraph 未undefined
var i = dv.pages().file.etags.distinct();
dv.paragraph(i)// 非dom操作没问题
var i = dv.pages().file.etags.distinct();
i.values;
// dom操作 paragraph 未undefined
var i = dv.pages().file.etags.distinct();
dv.paragraph(i)要解决需要手动初始化renderApi或调用executeJs:
js
const div = window.createDiv()
dv = (this.app as any).plugins.plugins.dataview.localApi(srcRelativePath, this.component, div);
const result = eval(query);const div = window.createDiv()
dv = (this.app as any).plugins.plugins.dataview.localApi(srcRelativePath, this.component, div);
const result = eval(query);这样仍然有问题,dataviewjs中默认渲染dom(调用的renderValue)是异步的,这里的result获取不全,要完美实现似乎只有两种路子了:
- 改dataviewjs源码
- 自己定义缺失的
.paragraph等等方法
暂且搁置。
参考
Is there a way to retrieve a list of tags of e.g. files in a folder? - Help - Obsidian Forum
Dataviewjs的奇技淫巧 - 经验分享 - Obsidian 中文论坛