html+css+js实现购物车,多选,反选,删除,计算总价。单击按钮增加和减少

html代码 

<div class="box">
            <div class="top">
                <img src="./img/dd_logo.jpg">
                <button onclick="window.close()">关闭</button>
             </div>
            <table>
            <tr> 
                <td><input type="checkbox"id="all"></td>
               <td>商品照片</td>
               <td>商品信息</td>   
               <td>单价</td>
               <td>数量</td>
               <td>总价</td>
               <td>操作</td>
            </tr>
            <tr>
                <td><input type="checkbox"id="check"></td>
                <td><img src="./img/dog.jpg"></td>
                <td>我和狗狗活下来了</td>   
                <td>21.00</td>
                <td><button class="cal">-</button><input type="text" readonly><button class="cal">+</button></td>
                <td class="total">0</td>
                <td><p>移入收藏</p><p class="del">删除</p></td>
             </tr>
             <tr>
                <td><input type="checkbox"id="check"></td>
                <td><img src="./img/mai.jpg"></td>
                <td>灰霾老了怎么办</td>   
                <td>24.00</td>
                <td><button class="cal">-</button><input type="text"  readonly><button class="cal">+</button></td>
                <td class="total">0</td>
                <td><p>移入收藏</p><p class="del">删除</p></td>
             </tr>
        </table>
        <div class="foot">
            <span>商品总计:</span><span class="sumTotal"></span><button>结算</button>
        </div>
    </div>

css代码

  *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .box{
            width: 700px;
            height: 400px;
            margin: 0 auto;
            border: 1px solid gray;
        }
        .top{
            width: 700px;
            display: flex;
            justify-content: space-between;
            padding: 20px 10px;
            align-items: center;
        }
        .top button{
            width: 70px;
            height: 30px;
            border: none;
            border-radius: 8px;
            background-color: red;
            color: white;
        }
        table{
            width: 680px;
            text-align: center;
            margin: 0 auto;  
        }
        table tr td{
            padding: 10px 0;
        }
        table tr td img{
            width: 60px;
            height: 80px;
        }
        table tr td input{
            width: 45px;
            text-align: center;
            outline: none;
        }
        table tr td button{
            width: 20px;
            height: 20px;
        }
        table tr td p{
            font-size: 14px;
        }
        .foot{
            width: 680px;
            height: 50px;
            margin: 0 auto;
            display: flex;
            justify-content: flex-end;
            align-items: center;
           border-top: 1px dotted gray;
        }
        .foot span:nth-of-type(2){
            margin-right: 150px;
            font-size: 18px;
            color: red;
        }
        .foot button{
            width: 60px;
            height: 30px;
            border: none;
            background-color: red;
            color: white;
            border-radius: 8px;
        }

js代码

 //删除
        let _del=document.querySelectorAll('.del');
        [..._del].forEach(_del=>{
            _del.onclick=function(){
                _del.parentNode.parentNode.remove()
                sumTotal()
            }
        });
        //单价
        let _cals=document.querySelectorAll('.cal')
        _cals.forEach(_cal=>{
            _cal.onclick=function(){
                let opera=_cal.innerHTML
                let _input=this.parentNode.childNodes[1]
                if(_input.value<=1&&opera=='-'){
                    return
                }
                let num=eval(_input.value*1+opera+1)
                _input.value=num
                let price=this.parentNode.previousElementSibling.innerHTML*1
                let total=price*num
                this.parentNode.nextElementSibling.innerHTML=total
                sumTotal()
            }
        })
        //多选
        let _all=document.querySelector('#all')
        let _check=document.querySelectorAll('#check')
        _all.onclick=function(){
            _check.forEach(_check=>{
                _check.checked=_all.checked
        })
        sumTotal()
        }
        //反选
        _check.forEach(radio=>{
            radio.onclick=function(){
                let _checkedboxes=document.querySelectorAll('input:checked:not(#all)')
                if(_check.length==_checkedboxes.length){
                    _all.checked=true
                }else{
                    _all.checked=false
                }
                sumTotal()
            } 
        })

        //总和
        let _sumTotal=document.querySelector('.sumTotal')
        function sumTotal() {
            let _checkedboxes=document.querySelectorAll('input:checked:not(#all)')
            let sumTotal=0
            _checkedboxes.forEach(_checkedbox=>{
                sumTotal+=_checkedbox.parentNode.parentNode.children[5].innerText * 1
            })
            _sumTotal.innerHTML=sumTotal
        }

  • 10
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HTML: ```html <!DOCTYPE html> <html> <head> <title>购物车</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h1>购物车</h1> <table> <thead> <tr> <th>商品名称</th> <th>单价</th> <th>数量</th> <th>小计</th> <th>操作</th> </tr> </thead> <tbody id="cart-list"> <tr> <td>商品1</td> <td>100</td> <td><input type="number" min="1" value="1" onchange="changeQuantity(this)"></td> <td>100</td> <td><button onclick="removeItem(this)">删除</button></td> </tr> <tr> <td>商品2</td> <td>200</td> <td><input type="number" min="1" value="1" onchange="changeQuantity(this)"></td> <td>200</td> <td><button onclick="removeItem(this)">删除</button></td> </tr> <tr> <td>商品3</td> <td>300</td> <td><input type="number" min="1" value="1" onchange="changeQuantity(this)"></td> <td>300</td> <td><button onclick="removeItem(this)">删除</button></td> </tr> </tbody> <tfoot> <tr> <th colspan="3">合计:</th> <th id="total-price">600</th> <th><button onclick="clearCart()">清空购物车</button></th> </tr> </tfoot> </table> </body> <script src="script.js"></script> </html> ``` CSS: ```css table { border-collapse: collapse; margin: 20px auto; } th, td { border: 1px solid #ccc; padding: 10px; text-align: center; } th { background-color: #eee; } button { background-color: #f00; color: #fff; border: none; padding: 5px 10px; cursor: pointer; } input[type="number"] { width: 50px; text-align: center; } ``` JavaScript: ```javascript // 获取购物车商品列表 let cartList = document.getElementById('cart-list').rows; // 计算总价 function calcTotalPrice() { let totalPrice = 0; for (let i = 1; i < cartList.length - 1; i++) { let quantity = cartList[i].cells[2].children[0].value; let price = cartList[i].cells[1].innerHTML; let subtotal = quantity * price; cartList[i].cells[3].innerHTML = subtotal; totalPrice += subtotal; } document.getElementById('total-price').innerHTML = totalPrice; } // 改变商品数量 function changeQuantity(input) { if (input.value < 1) { input.value = 1; } calcTotalPrice(); } // 删除商品 function removeItem(button) { let row = button.parentNode.parentNode; row.parentNode.removeChild(row); calcTotalPrice(); } // 清空购物车 function clearCart() { for (let i = 1; i < cartList.length - 1; i++) { cartList[i].parentNode.removeChild(cartList[i]); } document.getElementById('total-price').innerHTML = 0; } ``` 这段代码实现了一个简单的购物车功能,可以添加商品、删除商品、修改数量,并且会实时计算总价

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值