首頁  >  問答  >  主體

javascript - 購物車的JS底層原理是怎麼樣的?

1.購物車的底層原理是怎麼樣的?怎樣才能完成統計?
2.使用函數傳參做出來前半部分,後半部分該如何實現?
3.程式碼如下:

     <!doctype html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>网页标题</title>
  <style>
    li{margin-top:20px;}
  </style>
  <script>
    window.onload = function (){
        var box = document.getElementById("box");
        var aLi = box.getElementsByTagName("li");
        //var oU = document.getElementsByTagName("u");
        function fn(li){
            var aBtn = li.getElementsByTagName("input");
            var oSpan =li.getElementsByTagName("span")[0];
            var oI = li.getElementsByTagName("i")[0];
            var oB = li.getElementsByTagName("b")[0];

            aBtn[1].onclick = function(){
                oSpan.innerHTML++;
                oB.innerHTML = oSpan.innerHTML*oI.innerHTML;
            }
            aBtn[0].onclick = function(){
                if(oSpan.innerHTML>0){
                    oSpan.innerHTML--;
                }
                oB.innerHTML = oSpan.innerHTML*oI.innerHTML;
                }
            }
        
        for(var i=0;i<aLi.length;i++){
            fn(aLi[i]);
            //
        }
    

    }//js最后执行
  </script>
 </head>
 <body>
    <ul id="box">
        <li>
            <input type="button" value="-">
            <span>0</span>
            <input type="button" value="+">
            单价:<i>10</i>元
            小计:<b>0</b>元
        </li>
        <li>
            <input type="button" value="-">
            <span>0</span>
            <input type="button" value="+">
            单价:<i>7.5</i>元
            小计:<b>0</b>元
        </li> 
        <li>
            <input type="button" value="-">
            <span>0</span>
            <input type="button" value="+">
            单价:<i>15</i>元
            小计:<b>0</b>元
        </li> 
        <li>
            <input type="button" value="-">
            <span>0</span>
            <input type="button" value="+">
            单价:<i>20</i>元
            小计:<b>0</b>元
        </li> 
        <li>
            <input type="button" value="-">
            <span>0</span>
            <input type="button" value="+">
            单价:<i>150</i>元
            小计:<b>0</b>元
        </li>
        
    </ul>
 </body>
</html>
 
 
 
 

下面那部分的:商品合計一共n件,其中最貴的商品單價是a元,總共花費了b元的那部分該怎麼寫?
變數該如何賦值並統計最後的資料總和?
(程式碼和圖片已貼上)

習慣沉默習慣沉默2682 天前609

全部回覆(3)我來回復

  • 淡淡烟草味

    淡淡烟草味2017-05-19 10:38:16

    我把程式碼全貼出來。你看一下

       <!doctype html>
        <html>
         <head>
          <meta charset="UTF-8">
          <title>网页标题</title>
          <style>
            li{margin-top:20px;}
          </style>
          <script>
            window.onload = function (){
                // var box = document.getElementById("box");
                // var aLi = box.getElementsByTagName("li");
                // //var oU = document.getElementsByTagName("u");
                // function fn(li){
                //     var aBtn = li.getElementsByTagName("input");
                //     var oSpan =li.getElementsByTagName("span")[0];
                //     var oI = li.getElementsByTagName("i")[0];
                //     var oB = li.getElementsByTagName("b")[0];
        
                //     aBtn[1].onclick = function(){
                //         oSpan.innerHTML++;
                //         oB.innerHTML = oSpan.innerHTML*oI.innerHTML;
                //     }
                //     aBtn[0].onclick = function(){
                //         if(oSpan.innerHTML>0){
                //             oSpan.innerHTML--;
                //         }
                //         oB.innerHTML = oSpan.innerHTML*oI.innerHTML;
                //     }
                // }
                
                // for(var i=0;i<aLi.length;i++){
                //     fn(aLi[i]);
                //     counttotal()
                //     //
                // }
        
                //总和变量
                var total = 0;
                //单价最贵数组
                var mostexp = [];
                //dom 节点
                var box = document.getElementById("box");
                var aLi = box.getElementsByTagName("li");
                var idom = box.getElementsByTagName('i');
                //单价最高
                for(var i=0;i<idom.length;i++){
                    mostexp.push(+idom[i].innerHTML)
                }
                document.getElementById('j-exp').innerHTML = Math.max.apply(null,mostexp)
                //绑定加减事件
                function fn(li){
                    var oSpan =li.getElementsByTagName("span")[0];
                    var oI = li.getElementsByTagName("i")[0];
                    var oB = li.getElementsByTagName("b")[0];
                    var aBtn = li.getElementsByTagName("input");
        
                    for(var i=0,len=aBtn.length;i<len;i++){
                        if(i===0){
                            aBtn[i].onclick = function(){
                                if(oSpan.innerHTML>0){
                                    oSpan.innerHTML--;
                                }
                                oB.innerHTML = oSpan.innerHTML*oI.innerHTML;
                                counttotal()
                            }
                        }else{
                            aBtn[i].onclick = function(){
                                oSpan.innerHTML++;
                                oB.innerHTML = oSpan.innerHTML*oI.innerHTML;
                                counttotal()
                            }
                        }
                    }    
                }
        
                for(var i=0;i<aLi.length;i++){
                    fn(aLi[i]);
                }
    
                //计算总和
                function counttotal(){
                    total = 0;
                    var getb = document.getElementsByTagName('b');    
                    for(var i=0,len=getb.length;i<len;i++){
                        total+= +getb[i].innerHTML
                    }
                    document.getElementById('j-total').innerHTML = total
                }
                
            }//js最后执行
          </script>
         </head>
         <body>
            <ul id="box">
                <li>
                    <input type="button" value="-">
                    <span>0</span>
                    <input type="button" value="+">
                    单价:<i>10</i>元
                    小计:<b>0</b>元
                </li>
                <li>
                    <input type="button" value="-">
                    <span>0</span>
                    <input type="button" value="+">
                    单价:<i>7.5</i>元
                    小计:<b>0</b>元
                </li> 
                <li>
                    <input type="button" value="-">
                    <span>0</span>
                    <input type="button" value="+">
                    单价:<i>15</i>元
                    小计:<b>0</b>元
                </li> 
                <li>
                    <input type="button" value="-">
                    <span>0</span>
                    <input type="button" value="+">
                    单价:<i>20</i>元
                    小计:<b>0</b>元
                </li> 
                <li>
                    <input type="button" value="-">
                    <span>0</span>
                    <input type="button" value="+">
                    单价:<i>150</i>元
                    小计:<b>0</b>元
                </li>
                
            </ul>
            <!-- 变化 -->
            <p>单价最高:<span id="j-exp">0</span>元</p>
            <p>总计:<span id="j-total">0</span>元</p>
            <!-- 变化 -->
         </body>
        </html>

    回覆
    0
  • 天蓬老师

    天蓬老师2017-05-19 10:38:16

    用物件導向來寫購物車再適合不過了,以下是es6程式碼

    class Cart{
        constructor(){
            //set,map,array,随你选
            this.list = [];
        }
        //将商品加入购物车,需要判断购物车内是否有该商品,
        //以及商品规格是否相同
        add(goods){}
        //将商品移除购物车,这个key可以是id,名称等等,你自己决定
        remove(key){}
        //计算购物车总价,当然,最贵的当然可以计算出来了,排个序就号了
        computeMoney(){}
        //保存购物车,localstorage,服务器,你自己决定,保存之后还是之前更新界面还是你决定
        save(){}
        //清空购物车
        clear(){}
        //购物车是否为空
        isEmpty(){}
        //更多逻辑.......
    }

    最好為每個方法加上勾子函數(onSave,onAdd,onRemove....),以實現重複使用,解耦

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:38:16

    原理就是使用者在商品選擇頁點選加號的時候從資料來源拿到資料放到一個新陣列

    var data=res.data;
    var shopCar=[];
    add(index){//点击加号的时候
        shopCar[index]=data[index] 
    }

    接著得到一個新的陣列對象,就是購物車清單。
    統計就是把陣列物件裡的價格欄位相加,至於你用什麼方法相加看你自己喜好,我用的reduce。

    如果有減號,也要有對應的減去運算。

    回覆
    0
  • 取消回覆