JS 求助 - 按更新时间排序,查询当前文档内的块

3 个 JS 语句
查标题
  1. 自动查询当前及子文档(手动填思源随机生成的文档 ID 也行)
  2. 查询该文档及子文档的所有四级标题
  3. 按更新时间排序(上新下旧)
  4. 右侧显示更新日期(可以关闭,万一觉得日期碍眼)
查段落(一)
  1. 和查标题要求一样,不过改成查段落块、表格块
    • 我不知道 JS 形式表格块能否显示,不能的话算了
  2. 不渲染图片,无论本地还是图床(显示成文本)
    • 就是类似在思源复制图片,它在剪贴板时的文本状态
  3. 查询结果数量为 10
查段落(二)倒序
  1. 查段落(一) 要求一样,不过改成倒序(上旧下新)
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24652 引用 • 101148 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9327 引用 • 42465 回帖 • 114 关注
4 操作
8V9q7V 在 2025-03-05 18:59:59 更新了该帖
8V9q7V 在 2025-03-05 17:25:42 更新了该帖
8V9q7V 在 2025-03-05 17:24:15 更新了该帖
8V9q7V 在 2025-03-05 17:22:10 更新了该帖

相关帖子

被采纳的回答
  • 不知是否能满足你需求,你试试看

    先安装 简单查询 js,可参考 [js] 简单查询,让数据从此不再难查,支持显示多字段多视图

    然后

    查询标题

    在文档中输入 {{}} 在对话框中输入以下代码

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, content as 标题__ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item );

    查询段落

    在文档中输入 {{}} 在对话框中输入以下代码

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, content as 内容__ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item );

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 不知是否能满足你需求,你试试看

    先安装 简单查询 js,可参考 [js] 简单查询,让数据从此不再难查,支持显示多字段多视图

    然后

    查询标题

    在文档中输入 {{}} 在对话框中输入以下代码

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, content as 标题__ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item );

    查询段落

    在文档中输入 {{}} 在对话框中输入以下代码

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, content as 内容__ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item );
    2 回复
    3 操作
    wilsons 在 2025-03-06 08:52:33 更新了该回帖
    wilsons 在 2025-03-05 22:33:12 更新了该回帖
    wilsons 在 2025-03-05 22:30:11 更新了该回帖
  • 可以隐藏时分秒吗,只留日期,并把更新日期栏向右压缩——就像下图。既标题、内容尽量多占空间。

    updated as 更新时间__datetime 改为 updated as 更新时间__date_w150_2 即可,代码已更新。
    wilsons 1
    发现个需求,查询子文档,能否加个开关呢——默认不查询。
    8V9q7V
    @8V9q7V 代码已更新,isWithSubDoc 这个参数修改。同时也更新了“简单查询 js”文本对齐的问题,可以也更新下这个代码。
    wilsons 1
  • 查询段落、表格能否用纯 SQL 实现呢,因为 JS 把文本样式的抹去了,表格也成了一滩,看着不得劲。

    然后,这个帖子 SQL 求教 - 在路径内、列表内随机索引单个任务项,代码片段可以指定嵌入块只显示单个任务。那代码片段可以实现指定嵌入块不渲染图片吗,或者让指定嵌入块图片宽度 25%。有这个需求是因为有些图片信息少而占位长。

    如果可以的话,需求类似

    1. 自动查询,或手动填 ID
    2. 更新时间排序
    3. 右侧日期(代码片段可以实现指定嵌入块内右侧角标处显示日期吗,不行就放弃了)
    4. 是否包含子文档
    5. 结果数量为 10
    1 回复
    2 操作
    8V9q7V 在 2025-03-07 22:33:17 更新了该回帖
    8V9q7V 在 2025-03-07 22:25:28 更新了该回帖
  • wilsons 1 2 评论

    字段筛选用 markdown 就好了,这是你想要的效果吗

    image.png

    代码

    查标题

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 标题__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item );

    查段落

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 内容__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item, '', ({ row, index, data, ...args }) => { row.内容 = row.内容.replace(/<img/ig, '<img width="25%" style="float: left;"'); } );
    2 回复
    1 操作
    wilsons 在 2025-03-08 13:25:23 更新了该回帖
    凌晨还在回复,请你吃个馒头了~
    8V9q7V 1
    ❤️ 非常感谢!
    wilsons
  • 有些小问题:
    查标题

    最新的代码我这里查询不到。

    20250308110646.png

    查段落

    1、长段落显示不全,要滑动,滚动条看着也不清爽。

    20250308112222.png

    2、文字设置外观颜色后——不渲染,显露颜色代码

    20250308110738.png

    3、网络图片角标(软件设置里是关掉的),有点碍眼;然后,跟长段落一样有个滚动条,显示不全,不清爽

    20250308113749.png

    然后

    就是上楼提到的纯 SQL 方案,当然我也不知道哪个更有可能实现。

    1 回复
    1. 查标题查不到内容,是因为 //!js 前有空行,//!js 必须放到第一行
    2. 查段落,其他几点已解决。第 2 点,即文字添加颜色后的渲染问题,这个是思源 Lute 解析问题,暂时解决不了。可关注 issue Issue #14310 · siyuan-note/siyuan
    3. 纯 SQL 查询,由于需求复杂无法实现

    新代码:

    查标题

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 标题__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item, '', ({ row, index, data, ...args }) => { row.标题_style = (row.标题_style || '') + ';max-height:none;'; row.更新时间_style = (row.更新时间_style || '') + ';max-height:none;'; } );

    查段落

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 内容__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item, '', ({ row, index, data, ...args }) => { row.内容_style = (row.内容_style || '') + ';max-height:none;'; row.更新时间_style = (row.更新时间_style || '') + ';max-height:none;'; row.内容 = row.内容.replace(/<img/ig, '<img width="25%" style="float: left;"'); row.内容 = row.内容.replace(/<span class="img__net">.*?<\/span>/ig, ''); } );
    1 回复
  • D 大说设置啥参数,意思是可以完善吗?

    1 回复
  • 是的,已修复,代码无需改动,只需要更新下简单查询代码即可。

    简单查询 0.0.4 修复 Lute 解析 Markdown 问题,增加单元格 cellMaxHeight 和 cellMinWidth 设置选项

    see [js] 简单查询,让数据从此不再难查,支持显示多字段多视图

    1 回复
  • 捉个虫,测试发现无法渲染——斜体、加粗、删除线,这三种样式,排除了主题影响。

    1 回复
  • ???

    image.png

    image.png

    1 回复
  • 奇怪了,默认主题,无插件,只启用 SQL 简单查询(最新版)。在我两台电脑上都解析不出来。

    20250309222829.png

    1 回复
  • 你把测试文档上传看看。

    思源版本多少?

    简单查询 js 是 0.0.4 版吗?查看下源码,顶部有版本显示。

    2 回复
  • 思源 v3.1.24

    SQL 简单查询.js 0.0.4

    测试.sy.zip

    1 回复
  • 这就不知道了,你的文档到我这边就好了,我和你版本都一样。

    image.png

    1 回复
  • 我明白了,要在 设置 → 编辑器,打开加粗、斜体、删除线 的开关。不过有点奇怪的是,我下划线、行级代码等也没有开启却能正常解析。

    总之现在正常了。

    👍
    wilsons
  • 算是吹毛求疵吧,我习惯用得写味主题 - Salt 配色,会有底色(鼠标没有划过) + 下划线,可以透明化和去除吗?

    最好在当前 JS 内处理,不影响其他内容。

    20250309230655.png

    1 回复
    Salt 配色是什么
    wilsons
  • 因为有引用样式导致的,去掉样式即可

    查标题

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 标题__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item, '', ({ row, index, data, ...args }) => { row.标题_style = (row.标题_style || '') + ';max-height:none;'; row.标题 = row.标题.replace(/<span data-type="block-ref"/ig, '<span data-type="block-ref" style="background-color: transparent;border-bottom: none;"'); row.更新时间_style = (row.更新时间_style || '') + ';max-height:none;'; } );

    查段落

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 内容__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item, '', ({ row, index, data, ...args }) => { row.内容_style = (row.内容_style || '') + ';max-height:none;'; row.更新时间_style = (row.更新时间_style || '') + ';max-height:none;'; row.内容 = row.内容.replace(/<img/ig, '<img width="25%" style="float: left;"'); row.内容 = row.内容.replace(/<span class="img__net">.*?<\/span>/ig, ''); row.内容 = row.内容.replace(/<span data-type="block-ref"/ig, '<span data-type="block-ref" style="background-color: transparent;border-bottom: none;"'); } );
    1 操作
    wilsons 在 2025-03-10 10:02:04 更新了该回帖
  • 再更新下简单查询 js,优化一些样式细节,防止出现意外 bug,没有增加版本号。

请输入回帖内容 ...