我在使用思源笔记的数据库来构建一个简单的记账表格。
大概是有 2 个字段,“当前消费”,和,“消费总计”
“消费总计”列是一个“模板”字段,它用于获取上一行的“消费总计”的数值,然后加上当前这一行的“当前消费”,然后自动呈现数值
这里实现遇到的一个问题是,有什么函数可以获取到这个数据库的上一行记录呢?谢谢大家!
我在使用思源笔记的数据库来构建一个简单的记账表格。
大概是有 2 个字段,“当前消费”,和,“消费总计”
“消费总计”列是一个“模板”字段,它用于获取上一行的“消费总计”的数值,然后加上当前这一行的“当前消费”,然后自动呈现数值
这里实现遇到的一个问题是,有什么函数可以获取到这个数据库的上一行记录呢?谢谢大家!
可以通过 img 标签配合 js 实现。
模板代码:
<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>
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。
愿逝者安息!
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。
生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。
安全永远都不是一个小问题。
OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
新手上路,请谨慎驾驶!
黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。
A second brain, for you, forever.
小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。
由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!
WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。
MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。
安全 · 稳定 · 快速
为跨境从业人员提供专业的跨境浏览器
TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。
钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。
jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。
希望你我能在旅途中找到人生的下一站。
Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。
如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。
强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于