思源笔记数据库模板如何获取上一行记录?

我在使用思源笔记的数据库来构建一个简单的记账表格。

大概是有 2 个字段,“当前消费”,和,“消费总计”

“消费总计”列是一个“模板”字段,它用于获取上一行的“消费总计”的数值,然后加上当前这一行的“当前消费”,然后自动呈现数值

这里实现遇到的一个问题是,有什么函数可以获取到这个数据库的上一行记录呢?谢谢大家!

  • 思源笔记

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

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

    23575 引用 • 95623 回帖 • 2 关注
  • Q&A

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

    8744 引用 • 39931 回帖 • 137 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 截图描述一下?

    1 回复
  • treason2840
    作者

    image.png

    就是一个记录流水的功能,“累积消费”列是一个模板,他需要获取上一行的值,然后累加,当前行的“当前消费”进行记录。

    1 回复
  • 模板实现不了跨行计算,只能用这个:

    image.png

    1 回复
  • treason2840
    作者

    好的,谢谢!

  • 可以通过 img 标签配合 js 实现。

    image.png

    模板代码:

    <span><img src="" style="display:none;" onerror="
        (async () => {
            // 获取当前单元格
            const currCell = this.closest('div.av__cell');
            // 获取当前行
            const currRow = currCell.closest('div.av__row');
            // 获取前一个单元格的值
            let prevCellValue = 0;
            let prevCellColId = '';
            const prevCell = currCell.previousElementSibling;
            if(prevCell && prevCell.matches('div.av__cell')) {
                prevCellValue = parseFloat(prevCell.textContent);
                prevCellColId = prevCell.dataset.colId;
            }
            // 获取前一个单元格的所有前面的单元格的和
            let prevPrevCellsTotal = 0;
            const prevPrevRows = getPrevSiblings(currRow);
            prevPrevRows.forEach(prevPrevRow => {
                if(prevPrevRow) {
                    const prevPrevCell = prevPrevRow.querySelector(`div.av__cell[data-col-id='${prevCellColId}']`);
                    if(prevPrevCell) {
                        prevPrevCellsTotal += parseFloat(prevPrevCell.textContent);
                    }
                }
            });
            // 输出数据
            this.parentElement.outerHTML = (prevCellValue + prevPrevCellsTotal).toFixed(2).replace('.00', '') || '';
    
            // 获取所有前面的行
            function getPrevSiblings(currRow) {
                let siblings = [];
                let sibling = currRow.previousElementSibling;
                while (sibling) {
                    // 如果遇到了 div.av__row.av__row--header,则停止查找
                    if (sibling.tagName.toLowerCase() === 'div' && sibling.classList.contains('av__row--header')) {
                        break;
                    }
                    // 收集 div.av__row 元素
                    if (sibling.tagName.toLowerCase() === 'div' && sibling.classList.contains('av__row')) {
                        siblings.push(sibling);
                    }
                    sibling = sibling.previousElementSibling;
                }
                // 因为我们是从下往上添加的,所以最后需要反转数组来保持从上到下的顺序。
                return siblings.reverse();
            }
        })();
    " />正在计算...</span>
    

    详情可参考 思源如何给日记模板添加天气 - wilsons 的回帖

推荐标签 标签

  • AWS
    11 引用 • 28 回帖 • 2 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 67 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 14 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    132 引用 • 796 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 369 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 30 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 1 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖 • 2 关注
  • 安全

    安全永远都不是一个小问题。

    201 引用 • 816 回帖 • 3 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 75 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 149 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    16 引用 • 131 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 752 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 601 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 378 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 28 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 56 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 320 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 75 关注
  • Visio
    1 引用 • 2 回帖 • 2 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 899 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖 • 4 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    414 引用 • 1246 回帖 • 590 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖