我在使用思源笔记的数据库来构建一个简单的记账表格。
大概是有 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>
你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!
React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。
开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。
思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。
融合块、大纲和双向链接,重构你的思维。
Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用 。
jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。
笔记整理交给我,一心只读圣贤书。
DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。
愿逝者安息!
Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。
Mobi.css is a lightweight, flexible CSS framework that focus on mobile.
AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。
沉迷游戏伤身,强撸灰飞烟灭。
这是一个不能说的秘密。
Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。
你听到信仰的声音了么?
Quicker 您的指尖工具箱!操作更少,收获更多!
一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。
记录并分享人生的经历。
Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于