如何使用 jQuery 动态计算表格中数字列的总和

2次阅读

如何使用 jQuery 动态计算表格中数字列的总和

本文介绍如何在 jquery 中为动态添加的表格行实时累加数值列,并准确更新总计值,涵盖 dom 操作、类型转换循环求和及常见错误规避。

本文介绍如何在 jquery 中为动态添加的表格行实时累加数值列,并准确更新总计值,涵盖 dom 操作、类型转换、循环求和及常见错误规避。

在 Web 表单交互中,常需将用户输入的数字逐条追加至表格,并同步计算所有数值的总和。原代码存在多个关键问题:append() 缺少闭合 和 标签;尝试在新增行时直接修改 .table-total 文本却错误复用已有单元格内容(+= 逻辑混乱);且未遍历全部 .table-number 元素,导致仅取首个值或 NaN。

以下是修正后的完整实现方案:

✅ 正确的 jQuery 累加逻辑

<!DOCTYPE html> <html> <head>   <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body>  <table id="content-table">   <thead>     <tr>       <th>Letter</th>       <th>Number</th>     </tr>   </thead>   <tbody>     <tr>       <td class="table-letter">A</td>       <td class="table-number">5</td>     </tr>   </tbody> </table>  <table>   <tr>     <td><strong>Total:</strong></td>     <td class="table-total">5</td>   </tr> </table>  <form id="add-form">   <input id="letter" name="letter" placeholder="Enter letter" required />   <input type="number" id="number" name="number" placeholder="Enter number" required min="0" step="1" />   <button type="submit" id="add">ADD</button> </form>  <script> $(document).ready(function() {   $('#add-form').on('submit', function(e) {     e.preventDefault(); // 阻止表单默认提交      const letter = $('#letter').val().trim();     const numberInput = $('#number').val().trim();      if (!letter || !numberInput) return;      const number = parseInt(numberInput, 10);     if (isNaN(number)) return; // 安全校验:确保为有效整数      // ✅ 动态插入新行(注意闭合标签)     $('#content-table tbody').append(`       <tr>         <td class="table-letter">${letter}</td>         <td class="table-number">${number}</td>       </tr>     `);      // ✅ 重新计算所有 .table-number 的总和     let total = 0;     $('.table-number').each(function() {       const val = parseInt($(this).text(), 10);       if (!isNaN(val)) total += val;     });      // ✅ 更新总计显示     $('.table-total').text(total);      // ✅ 可选:清空输入框     $('#letter, #number').val('');   }); }); </script>  </body> </html>

? 关键要点说明

  • DOM 结构规范:使用
    明确包裹数据行,语义清晰且便于 jQuery 精准操作;

  • 安全类型转换:始终使用 parseInt(value, 10) 并配合 isNaN() 校验,避免 “abc” 或空字符串导致 NaN 污染总和;
  • 避免重复累加陷阱:原代码中 $(“td.table-number”).html() 返回第一个匹配项文本,且 += 在赋值语句中语法非法;正确做法是每次重新遍历全部 .table-number 单元格求和
  • 事件委托优化:使用 $(‘#add-form’).on(‘submit’, …) 替代 $(‘button#add’).click(…),更符合现代实践,且天然支持后续动态添加的表单;
  • 用户体验增强:添加 e.preventDefault()、输入清空、min=”0″ 等细节,提升健壮性与可用性。
  • ⚠️ 常见错误规避清单

    错误写法 后果 正确做法
    $(“td.table-number”).html() += … 语法错误,+= 不可用于 jQuery 对象方法链 使用 .each() 遍历并累加变量
    parseInt($(“td.table-number”).text()) 仅取第一个单元格值 使用 $(‘.table-number’).each(…) 或 Array.from(…).reduce(…)
    忘记 e.preventDefault() 页面刷新导致数据丢失 表单提交必须显式阻止默认行为
    未校验 isNaN() 输入非数字时总和变为 NaN 每次解析后判断有效性

    通过以上实现,你不仅能稳定完成动态表格数值累加,还能构建可维护、可扩展的数据聚合交互模块。该模式亦适用于单价×数量→小计、多列统计等进阶场景。

text=ZqhQzanResources