JavaScript.07.购物车案例(含源代码)

购物车图片
在这里插入图片描述
购物车案例源代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="">
    <tr>
        <td>全选<input type="checkbox" onclick="selectAll(this.checked)"></td>
        <td>名称</td>
        <td>单价</td>
        <td>个数</td>
        <td>总价</td>
        <td>操作</td>
    </tr>
    <tr>
        <td><input type="checkbox"></td>
        <td>🍓🍓🍓</td>
        <td contenteditable="true" class="price" onblur="calcRow('',this.parentElement)">10.00</td>
        <td contenteditable="true" class="count" onblur="calcRow('',this.parentElement)">1</td>
        <td class="sum">10.00</td>
        <td>
            <button onclick="calcRow('+',this.parentElement.parentElement)">+</button>
            <button onclick="calcRow('-',this.parentElement.parentElement)">-</button>
            <button onclick="delRow(this.parentElement.parentElement)">删除</button>
        </td>
    </tr>
    <tr>
        <td><input type="checkbox"></td>
        <td>🍉🍉🍉</td>
        <td contenteditable="true" class="price" onblur="calcRow('',this.parentElement)">10.00</td>
        <td contenteditable="true" class="count" onblur="calcRow('',this.parentElement)">1</td>
        <td class="sum">10.00</td>
        <td>
            <button onclick="calcRow('+',this.parentElement.parentElement)">+</button>
            <button onclick="calcRow('-',this.parentElement.parentElement)">-</button>
            <button onclick="delRow(this.parentElement.parentElement)">删除</button>
        </td>
    </tr>
    <tr>
        <td><input type="checkbox"></td>
        <td>🍍🍍🍍</td>
        <td contenteditable="true" class="price" onblur="calcRow('',this.parentElement)">10.00</td>
        <td contenteditable="true" class="count" onblur="calcRow('',this.parentElement)">1</td>
        <td class="sum">10.00</td>
        <td>
            <button onclick="calcRow('+',this.parentElement.parentElement)">+</button>
            <button onclick="calcRow('-',this.parentElement.parentElement)">-</button>
            <button onclick="delRow(this.parentElement.parentElement)"">删除</button>
    </tr>
</table>
<h1>总价: $<font color="green" id="allPrice">0.0</font></h1>
<button onclick="delCKRow()">删除所选的商品</button>
<script>

    //计算当前所有商品的总价
    function calcAll() {
        //获得页面中所有的行
        var rs=document.getElementsByTagName("tr")
        var sum=0;
        for(let i=1;i<rs.length;i++){
			console.log(rs.length)
            //rs[i]就是除了第一行之外的其他的行
            var s1=rs[i].getElementsByClassName("sum")[0].textContent
            sum+=parseFloat(s1)
        }
        //给页面赋值,只要小书店后两位
        allPrice.textContent=sum.toFixed(2)
    }

    //删除选中的行
    function delCKRow() {
        //获得页面中所有的行
        var rs=document.getElementsByTagName("tr")
        //将集合collection变成数组array
        rs=Array.from(rs)
        for(let i=1;i<rs.length;i++){
            //拿到行中对应的多选框
            var ck=rs[i].querySelectorAll("input[type='checkbox']")[0]
            //判断多选框是否被选中
            if(ck.checked){
                //删除该行
                rs[i].outerHTML=""
            }
        }
        calcAll()
    }

    //全选功能
    function selectAll(status) {
        var is=document.querySelectorAll("input[type='checkbox']")
        for (let i of is){
            i.checked=status
        }
    }

    //按钮点击删除该行
    function delRow(tr) {
        tr.outerHTML=""
        calcAll()
    }

    //页面数值变化重新计算价格
    function calcRow(rex,tr) {
        //rex是运算符号
        //tr是当前对应的行
        var td=tr.getElementsByClassName("count")[0]
        if(rex==="+"){
            td.textContent=td.textContent*1+1
        }
        if(rex==="-"){
            td.textContent-=1
        }
        calc(tr)
    }

    //写一个函数:算出当前一行中的价格并完成赋值
    function calc(tr) {
        //value只有在input或者select
        //其他的内容全部使用textContent,innerHTML
        var price=tr.getElementsByClassName("price")[0].textContent
        var count=tr.getElementsByClassName("count")[0].textContent
        if(isNaN(price*1)){
            tr.getElementsByClassName("price")[0].textContent=0
            price=0
        }
        if(isNaN(count*1)){
            tr.getElementsByClassName("count")[0].textContent=0
            count=0
        }
        //使用单价*数量算出总价 并赋值给对应元素
        tr.getElementsByClassName("sum")[0].textContent=(price*count).toFixed(2)
        calcAll()
    }

    //窗口的加载事件  会在整个页面加载完成之后执行
    window.onload=()=>{
        //获得页面中所有的行
        var rs=document.getElementsByTagName("tr")
        for(let i=1;i<rs.length;i++){
            calc(rs[i])
        }
    }
</script>
</body>
</html>
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值