DataviewJS 下拉筛选菜单搜索功能

image image

效果 GIF,点击展开

20240417_144811

DataviewJS 代码
const pages = dv.pages(`"文件目录"`), yamlKey = 'source'
, dc = str=> document.createElement(str), inpu = dc('input'), sele = dc('datalist')
let arr = Array.from(new Set(pages.map(p=> p[yamlKey]).filter(p=> p))); arr.unshift('..')
inpu.style.width = '120px' /*输入框宽度*/; inpu.setAttribute('list', 'demo'); sele.id = 'demo'
inpu.onchange = ()=> arr.includes(inpu.value) && xl()
arr.map(p=> { const el = dc('option'); el.value = p; sele.appendChild(el) })
; [inpu, sele].map(el=> dv.container.appendChild(el))
const table = dv.el('div'), xl = ()=> { table.empty(); inpu.placeholder = '来源: ..'; let files = pages
  if (arr.slice(1).includes(inpu.value)) { inpu.placeholder = `来源: ${inpu.value}`; files = files.filter(p=> p[yamlKey] == inpu.value) }
  dv.api.table(['文档', '来源'], files.map(p=> [p.file.link, p[yamlKey]]), table, dv.component); inpu.value = ''
}; xl()
  • 示例 YAML 键为 source
  • 可自行调整 dv.api.table() 前两项,类似 dv.table()

相关:【已解决】我想创建一个过滤属性表,点击按钮便可以筛选出不同来源的文章

最初搜索到的方案是用 Select2 实现带查找的下拉菜单,英文论坛也找到了用 JS 凑 HTML 用上 jQuery 和 DataTables 的 先例,想不到还是搞不定,最后使用了现在的方案。

感觉自己总在整些旁门左道…

新的下拉查找框已陆续更新到旧帖:

1 个赞

太棒了,感谢分享。

旁门左道什么的,自己也有同感,看了很多帖子,下载了不少别人分享的示例库,虽然知道记笔记才是最重要的,但就是忍不住折腾

不不不,其实这里的意思是,个人正经的技术路径老也搞不定,总是只能弄一些旁门左道。

具体到这个话题,就是一直报错 $(...).select2 is not a function,直到更改方案。甚至不知道是不是连 Select2 导入都没搞定。

所以也许有人知道 DataviewJS 怎么在线引入吗…

哈哈哈,和我相似,大道需要花费更多时间和精力,小道能立竿见影有成就感,但旁门左道要做到极致也不容易。

之前照着这个帖子的代码自己改了改,可以实现下拉菜单

但是自己的代码太复杂,而且本来想实现多重筛选的,但是那样的话代码就太太太太复杂了得各种if,我想了想感觉自己是理不清里面的逻辑的,就没管
不知道有没有插件能直接对已经生成的dv表格直接加上筛选功能,就跟sortable插件一样直接给表格添加上功能