怎么在此基础上加上总计效果。


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box"></div>
    <script>
        // 根据数据创建表格(作业3效果图), 并实现删除按钮的删除功能
        var str = "小米手机@1500@黑色@0.5kg @2#华为手机@1698@蓝色@0.45kg @3#iphoneX@7899@红色@0.6kg@7";

        // 裁切字符串成二维数组
        var arr = str.split("#");

        for (var i = 0; i < arr.length; i++) {
            arr[i] = arr[i].split("@");
        }

        // 得到数据
        console.log(arr);


        // 初始字符串
        var eleStr = '<table border="1" cellspacing="0" cellpadding="10"><tr> <td class="all"><input type="checkbox"></td>    <td>名称</td><td>单价</td><td>颜色</td><td>重量</td><td>减少</td><td>数量</td><td>增加</td><td>总价</td><td>操作</td></tr>'

        // 遍历二维数组, 创建表格
        for (var i = 0; i < arr.length; i++) {
            // 有几个子数组就创建几行
            eleStr += "<tr>";
            // 在行的开头插入复选框
            eleStr += "<td><input type='checkbox'></td>";

            // 遍历子数组 会执行5次
            for (var j = 0; j < arr[i].length; j++) {
                // 数量
                if (j == 4) {
                    eleStr += "<td>-</td>";
                    eleStr += "<td> <input type='text' value='" + 2 + "' style='width:20px;'> </td>";
                    eleStr += "<td>+</td>";
                } else {
                    eleStr += "<td>" + arr[i][j] + "</td>";
                }
            }

            // 给当前行加上总价
            eleStr += "<td>" + (arr[i][1] * arr[i][4]) + "</td>";
            // 给当前行加上删除按钮
            eleStr += "<td>删除</td>";
            eleStr += "</tr>";
        }

        eleStr += "</table>";

        // 把字符串插入到页面上
        box.innerHTML = eleStr;



        // 给每一行tr添加类名
        var tr = document.querySelectorAll("tr"); //nodeList
        tr.forEach(function (ele, i) {
            console.log(ele); // tr

            // 第一行 tr 不需要添加类名
            if(i != 0){
                ele.querySelector("td:nth-of-type(1)").className = "checked";
                ele.querySelector("td:nth-of-type(3)").className = "price";
                ele.querySelector("td:nth-of-type(7)").className = "number";
                ele.querySelector("td:nth-of-type(9)").className = "totle";
                ele.querySelector("td:nth-of-type(10)").className = "delete";

                // 减少增加
                // ele.querySelector("td:nth-of-type(6)").className = "reduce"
                // ele.querySelector("td:nth-of-type(8)").className = "add"
                ele.querySelector("td:nth-of-type(6)").className = "btn";
                ele.querySelector("td:nth-of-type(8)").className = "btn";
            }
        })


        
        // 添加类名以后, 实现 减少/增加 按钮的功能
        var btn = document.querySelectorAll(".btn");  // 减少增加按钮
        // 实现 减少/增加 按钮的功能
        for(var i=0; i<btn.length; i++){
            // 节点也是对象 对象可以添加属性, 用来记录下标
            btn[i].abc = i;
            
            // 给每一个元素绑定点击事件
            btn[i].onclick = function(){
                // console.log(this.abc);

                // 获取当前按钮的父元素
                var parent = this.parentElement;
                // 获取单价
                var price = parent.querySelector(".price");
                // 获取数量
                var number = parent.querySelector(".number>input"); // 输入框
                // 总价
                var totle = parent.querySelector(".totle");

                // 根据下标, 决定数量加减, 改变商品数量
                if(this.abc % 2 == 0){
                    number.value = --number.value < 1 ? 1 : number.value;
                }else{
                    number.value++
                }

                // 修改商品数量以后, 重新计算总价
                totle.textContent = number.value * price.textContent;
            }
        }

        // 实现删除的功能
        var del = document.querySelectorAll(".delete");
        for(var i=0; i<del.length; i++){
            del[i].onclick = function(){
                this.parentNode.parentNode.removeChild(this.parentNode);

                // 每次点击删除按钮, 需要重新判断是否全选
                hasCheckAll();
            }
        }


        // 全选按钮的功能
        var allCheck = document.querySelector(".all>input");
        // 全选按钮的点击事件
        allCheck.onclick = function(){
            // 每次点击都要 重新获取当前的复选框
            var checked = document.querySelectorAll(".checked>input");

            // 循环所有复选框
            for(var i=0; i<checked.length; i++){
                // 给所有的复选框状态 等于 全选按钮的状态
                checked[i].checked = this.checked;
            }
        }


        // 单独的复选按钮的功能
        var check_btn = document.querySelectorAll(".checked>input");
        // 给复选按钮绑定点击事件
        for(var i=0; i<check_btn.length; i++){
            check_btn[i].onclick = function(){
                // 每次点击复选框, 需要重新判断是否全选
                hasCheckAll();
            }
        }


        // 判断是否全选的函数
        function hasCheckAll(){
            // 重新获取所有的复选框 (避免有一些被删除)
            var ipt = document.querySelectorAll(".checked>input");
            
            // 假设现在是全选的
            var flag = true;

            // 每次点击都要循环所有的复选框, 判断所有复选框的状态
            for(var j=0; j<ipt.length;j++){
                // 如果当前的复选框未选中
                if(ipt[j].checked == false){
                    // 假设不成立
                    flag = false;
                    break;
                }
            }

            // 如果长度为0
            if(ipt.length == 0){
                // 全选不选中
                allCheck.checked = false;
            }else{
                // 根据flag的状态决定是否全选
                allCheck.checked = flag;
            }
        }
    </script>
</body>

</html>

搞这么复杂?这肯定有别的方式实现这个吧