基于JSON数据的计算实现及单元格编辑功能技术咨询
解答你的两个JavaScript表格相关问题
嘿,我来帮你搞定这两个问题,一步步来:
问题1:计算JSON数据中的「Entry Value」列值
你之前的写法无效,是因为在定义myData数组里的对象时,myData这个变量还没被完全创建出来,根本没法引用myData.Units这种属性。解决思路很简单:先定义好基础数据,再遍历数组计算每一行的乘积。
具体实现代码
// 第一步:先定义基础数据,Entry Value暂时留空 var myData = [ { "No": 1, "Ticker": "WSI", "Units": 72, "Price In": 15, "Entry Value": "" }, { "No": 2, "Ticker": "DE", "Units": 25, "Price In": 15, "Entry Value": "" }, // 其他数据项... ]; // 第二步:遍历数组,计算每一行的Entry Value // 方法一:用forEach(更简洁) myData.forEach(item => { // 注意「Price In」是带空格的键,必须用方括号访问 item["Entry Value"] = item.Units * item["Price In"]; }); // 方法二:用for循环(适合新手理解基础逻辑) // for (var i = 0; i < myData.length; i++) { // myData[i]["Entry Value"] = myData[i].Units * myData[i]["Price In"]; // }
计算完成后,再运行你原来的生成表格的代码,「Entry Value」列就会显示正确的乘积结果了。
问题2:实现单元格点击编辑需要学习的技术主题
作为新手,你可以从这些基础主题入手,循序渐进:
- DOM操作基础:学会用
getElementById、querySelector获取页面元素,用createElement创建新元素,用appendChild/innerHTML修改页面内容——这是操作表格和单元格的核心。 - 事件处理:重点掌握
addEventListener绑定点击、失去焦点(blur)等事件,理解事件委托的概念(不用给每个单元格单独绑事件,给整个表格绑事件更高效)。 - 表单元素操作:了解
<input>输入框的基本用法,比如设置初始值、获取输入内容,监听输入相关事件。 - 数据同步逻辑:编辑单元格后,要把页面上的修改同步回
myData数组,保证数据和页面展示一致——比如通过行号、「No」字段匹配对应的数组项。 - JavaScript核心语法:巩固数组遍历(forEach、for循环)、对象属性访问(点语法/方括号语法)、条件判断这些基础,所有功能都依赖这些。
简单的单元格编辑示例片段
给你一个极简的实现思路,帮助你理解:
// 给表格绑定点击事件(事件委托) document.getElementById('jstable').addEventListener('click', function(e) { // 判断点击的是单元格 if (e.target.tagName === 'TD') { const td = e.target; const originalValue = td.textContent; // 创建输入框并替换单元格内容 const input = document.createElement('input'); input.value = originalValue; td.innerHTML = ''; td.appendChild(input); input.focus(); // 自动聚焦输入框 // 输入框失去焦点时保存修改 input.addEventListener('blur', function() { const newValue = input.value; td.textContent = newValue; // 同步更新myData数组(这里假设第一列是No,用来匹配数据项) const row = td.parentElement; const itemNo = row.querySelector('td:first-child').textContent; const targetItem = myData.find(item => item.No == itemNo); // 获取当前列的列名(从表头匹配) const columnIndex = Array.from(row.children).indexOf(td); const columnName = Array.from(row.parentElement.querySelector('tr').children)[columnIndex].textContent; // 更新数据 targetItem[columnName] = newValue; }); } });
内容的提问来源于stack exchange,提问作者Eryk Sawicki
相关产品推荐
相关产品推荐

