javaScript原生版购物车:全选、单选、全删、商品数量增减、计算总价、添加商品(代码)

题目:

CSS代码如下:

<style>

        *{

            margin: 0px;

            padding: 0px;

        }

        .header,.content,.floot{

            width: 800px;

            margin:0px auto;

        }

        .header ul li,.content ul li{

            float: left;

            list-style: none;

            width: 100px;

            line-height: 100px;

            text-align: center;

        }

        /* 清除浮动 */

        .clear{

            clear:both

        }

        .li2{

            width: 200px;

        }

        button{

            padding: 2px 5px;

        }

    </style>

HTML代码如下:

<div class="header">

        <ul>

            <li><input type="checkbox" name="quan" οnclick="all2(this)">全选</li>

            <li class='li2'>商品图片</li> 

            <li>数量</li>

            <li>单价</li>

            <li>商品名称</li>

            <li>小计</li>

            <li>操作</li>

        </ul>

        <div class='clear'></div>

    </div>

    <div class='content'>

        <ul>

            <li><input type="checkbox" name="xuan" οnclick="radio1()"></li>

            <li class='li2'><img src="./img/1.jpg" width="100"></li> 

            <li>

                <button οnclick="jian(this)">-</button>

                <button>1</button>

                <button οnclick="add1(this)">+</button>

            </li>

            <li>¥<span>2200.00</span></li>

            <li>数码相机</li>

            <li>¥<span>2200.00</span></li>

            <li><button οnclick="del(this)">删除</button></li>

            <div class='clear'></div>

        </ul>

        

        <ul>

            <li><input type="checkbox" name="xuan" οnclick="radio1()"></li>

            <li class="li2"><img src="./img/2.jpg" width="100"></li> 

            <li>

                <button οnclick="jian(this)">-</button>

                <button>1</button>

                <button οnclick="add1(this)">+</button>

            </li>

            <li>¥<span>2300.00</span></li>

            <li>家用相机</li>

            <li>¥<span>2300.00</span></li>

            <li><button οnclick="del(this)">删除</button></li>

            <div class="clear"></div>

        </ul>

    </div>

    <div class='floot'>

        <button οnclick="delAll()">全删</button>

        <button οnclick="addGood()">添加商品</button>

        已选商品总计:¥<span>00.00</span>

        店铺合计:¥<span>00.00</span>

    </div>

JS代码如下:

<script>

        //获取操作对象

        var header=document.querySelector('.header')

        var content=document.querySelector('.content')

        var floot=document.querySelector(".floot")

        //获取所有的选中框对象

        // var xuans=content.querySelectorAll('[name="xuan"]')

        var xuans=document.getElementsByName("xuan")

        //全选

        function all2(btn){

            //遍历每一个选中框对象

            for(var i=0;i<xuans.length;i++){

                //判断全选框是否被选中

                if(btn.checked){

                    xuans[i].checked=true

                }else{

                    xuans[i].checked=false

                }

            }

            totalXuan()

        }

        //选中框

        function radio1(){

            //获取全选框对象

            var quan=header.querySelector('[name="quan"]')

            var a=0 //统计被选中的次数

            //遍历所有选中框对象

            for(var i=0;i<xuans.length;i++){

                //判断选中框是否被选中

                if(xuans[i].checked){

                    a++

                }

            }

            //判断被选中的次数是否等于选中框的长度

            if(a==xuans.length){

                quan.checked=true

            }else{

                quan.checked=false

            }

            totalXuan()

        }

        //加法

        function add1(btn){

            //获取数量

            var num=btn.previousElementSibling.innerHTML

            //修改数量

            num++

            //重新把数量赋值给指定位置

            btn.previousElementSibling.innerHTML=num

            //获取单价

            var price=btn.parentNode.nextElementSibling.lastElementChild.innerHTML

            //计算小计

            var sum=num*parseFloat(price)

            //重新给小计赋值

            // btn.parentNode.nextElementSibling.nextElementSibling.nextElementSibling.lastElementChild.innerHTML=sum

            btn.parentNode.parentNode.children[5].lastElementChild.innerHTML=sum

            totalHe()

            totalXuan()

        }

        //减法

        function jian(btn){

            //获取数量

            var num=btn.nextElementSibling.innerHTML

            if(num<=1){

                num=1

            }else{

                num--

            }

            //重新给数量赋值

            btn.nextElementSibling.innerHTML=num

             //获取单价

             var price=btn.parentNode.nextElementSibling.lastElementChild.innerHTML

            //计算小计

            var sum=num*parseFloat(price)

            //重新给小计赋值

            btn.parentNode.parentNode.children[5].lastElementChild.innerHTML=sum

            totalHe()

            totalXuan()

        }

        //删除

        function del(btn){

            btn.parentNode.parentNode.remove()

            totalHe()

            totalXuan()

        }

        //全删

        function delAll(){

            //遍历每一个选中框对象

            for(var i=xuans.length-1;i>=0;i--){

                //判断当前选中框是否被选中

                if(xuans[i].checked){

                    //删除当前商品

                    xuans[i].parentNode.parentNode.remove()

                }

            }

            totalHe()

            totalXuan()

        }

        m=3 //图片名称

        //添加商品

        function addGood(){

            //创建ul标签

            var newUl=document.createElement('ul')

            //给当前新节点添加内容

            newUl.innerHTML='<li><input type="checkbox" name="xuan" οnclick="radio1()"></li>'

            +'<li class="li2"><img src="./img/'+m+'.jpg" width="100"></li>'

            +'<li>'

                +'<button οnclick="jian(this)">-</button>'

                +' <button>1</button>'

                +' <button οnclick="add1(this)">+</button>'

                +'</li>'

                +'<li>¥<span>3300.00</span></li>'

                +'<li>索尼相机</li>'

                +'<li>¥<span>3300.00</span></li>'

                +'<li><button οnclick="del(this)">删除</button></li>'

                +'<div class="clear"></div>'

            //把当前新节点追加到content对象中

            content.appendChild(newUl)

            m++

            if(m>7){

                m=1

            }

            totalHe()

            totalXuan()

            radio1()

        }

        //店铺合计

        function totalHe(){

            //获取所有商品

            var uls=content.querySelectorAll("ul")

            var sum=0//合计

            //遍历每一个商品

            for(var i=0;i<uls.length;i++){

                //获取每个商品的小计

                var num=uls[i].children[5].lastElementChild.innerHTML

                sum+=parseFloat(num)

            }

            //给店铺合计赋值

            floot.lastElementChild.innerHTML=sum

        }

        totalHe()

        //已选商品总计

        function totalXuan(){

            var sum=0//商品总计

            //遍历每一个选中框对象

            for(var i=0;i<xuans.length;i++){

                //判断当前选中框是否被选中

                if(xuans[i].checked){

                    //获取当前被选中的商品小计

                    var num=xuans[i].parentNode.parentNode.children[5].lastElementChild.innerHTML

                    sum+=parseFloat(num)

                }

            }

            //给已选商品总计赋值

            floot.lastElementChild.previousElementSibling.innerHTML=sum

        }

        totalXuan()

    </script>

<style>
        *{
            margin: 0px;
            padding: 0px;
        }
        .header,.content,.floot{
            width: 800px;
            margin:0px auto;
        }
        .header ul li,.content ul li{
            float: left;
            list-style: none;
            width: 100px;
            line-height: 100px;
            text-align: center;
        }

        /* 清除浮动 */
        .clear{
            clear:both
        }
        .li2{
            width: 200px;
        }
        button{
            padding: 2px 5px;
        }
    </style>
<div class="header">

        <ul>

            <li><input type="checkbox" name="quan" onclick="all2(this)">全选</li>

            <li class='li2'>商品图片</li> 

            <li>数量</li>

            <li>单价</li>

            <li>商品名称</li>

            <li>小计</li>

            <li>操作</li>

        </ul>

        <div class='clear'></div>

    </div>

    <div class='content'>

        <ul>

            <li><input type="checkbox" name="xuan" onclick="radio1()"></li>

            <li class='li2'><img src="./img/1.jpg" width="100"></li> 

            <li>

                <button onclick="jian(this)">-</button>

                <button>1</button>

                <button onclick="add1(this)">+</button>

            </li>

            <li>¥<span>2200.00</span></li>

            <li>数码相机</li>

            <li>¥<span>2200.00</span></li>

            <li><button onclick="del(this)">删除</button></li>

            <div class='clear'></div>

        </ul>

        

        <ul>

            <li><input type="checkbox" name="xuan" onclick="radio1()"></li>

            <li class="li2"><img src="./img/2.jpg" width="100"></li> 

            <li>

                <button onclick="jian(this)">-</button>

                <button>1</button>

                <button onclick="add1(this)">+</button>

            </li>

            <li>¥<span>2300.00</span></li>

            <li>家用相机</li>

            <li>¥<span>2300.00</span></li>

            <li><button onclick="del(this)">删除</button></li>

            <div class="clear"></div>

        </ul>

    </div>

    <div class='floot'>

        <button onclick="delAll()">全删</button>

        <button onclick="addGood()">添加商品</button>

        已选商品总计:¥<span>00.00</span>

        店铺合计:¥<span>00.00</span>

    </div>
<script>
        //获取操作对象
        var header=document.querySelector('.header')
        var content=document.querySelector('.content')
        var floot=document.querySelector(".floot")
        //获取所有的选中框对象
        // var xuans=content.querySelectorAll('[name="xuan"]')
        var xuans=document.getElementsByName("xuan")
        //全选
        function all2(btn){
            //遍历每一个选中框对象
            for(var i=0;i<xuans.length;i++){
                //判断全选框是否被选中
                if(btn.checked){
                    xuans[i].checked=true
                }else{
                    xuans[i].checked=false
                }
            }
            totalXuan()
        }
        //选中框
        function radio1(){
            //获取全选框对象
            var quan=header.querySelector('[name="quan"]')
            var a=0 //统计被选中的次数
            //遍历所有选中框对象
            for(var i=0;i<xuans.length;i++){
                //判断选中框是否被选中
                if(xuans[i].checked){
                    a++
                }
            }
            //判断被选中的次数是否等于选中框的长度
            if(a==xuans.length){
                quan.checked=true
            }else{
                quan.checked=false
            }
            totalXuan()
        }
        //加法
        function add1(btn){
            //获取数量
            var num=btn.previousElementSibling.innerHTML
            //修改数量
            num++
            //重新把数量赋值给指定位置
            btn.previousElementSibling.innerHTML=num
            //获取单价
            var price=btn.parentNode.nextElementSibling.lastElementChild.innerHTML
            //计算小计
            var sum=num*parseFloat(price)
            //重新给小计赋值
            // btn.parentNode.nextElementSibling.nextElementSibling.nextElementSibling.lastElementChild.innerHTML=sum
            btn.parentNode.parentNode.children[5].lastElementChild.innerHTML=sum
            totalHe()
            totalXuan()
        }
        //减法
        function jian(btn){
            //获取数量
            var num=btn.nextElementSibling.innerHTML
            if(num<=1){
                num=1
            }else{
                num--
            }
            //重新给数量赋值
            btn.nextElementSibling.innerHTML=num
             //获取单价
             var price=btn.parentNode.nextElementSibling.lastElementChild.innerHTML
            //计算小计
            var sum=num*parseFloat(price)
            //重新给小计赋值
            btn.parentNode.parentNode.children[5].lastElementChild.innerHTML=sum
            totalHe()
            totalXuan()
        }
        //删除
        function del(btn){
            btn.parentNode.parentNode.remove()
            totalHe()
            totalXuan()
        }
        //全删
        function delAll(){
            //遍历每一个选中框对象
            for(var i=xuans.length-1;i>=0;i--){
                //判断当前选中框是否被选中
                if(xuans[i].checked){
                    //删除当前商品
                    xuans[i].parentNode.parentNode.remove()
                }
            }
            totalHe()
            totalXuan()
        }
        m=3 //图片名称
        //添加商品
        function addGood(){
            //创建ul标签
            var newUl=document.createElement('ul')
            //给当前新节点添加内容
            newUl.innerHTML='<li><input type="checkbox" name="xuan" onclick="radio1()"></li>'
            +'<li class="li2"><img src="./img/'+m+'.jpg" width="100"></li>'
            +'<li>'
                +'<button onclick="jian(this)">-</button>'
                +' <button>1</button>'
                +' <button onclick="add1(this)">+</button>'
                +'</li>'
                +'<li>¥<span>3300.00</span></li>'
                +'<li>索尼相机</li>'
                +'<li>¥<span>3300.00</span></li>'
                +'<li><button onclick="del(this)">删除</button></li>'
                +'<div class="clear"></div>'
            //把当前新节点追加到content对象中
            content.appendChild(newUl)
            m++
            if(m>7){
                m=1
            }
            totalHe()
            totalXuan()
            radio1()
        }

        //店铺合计
        function totalHe(){
            //获取所有商品
            var uls=content.querySelectorAll("ul")
            var sum=0//合计
            //遍历每一个商品
            for(var i=0;i<uls.length;i++){
                //获取每个商品的小计
                var num=uls[i].children[5].lastElementChild.innerHTML
                sum+=parseFloat(num)
            }
            //给店铺合计赋值
            floot.lastElementChild.innerHTML=sum
        }
        totalHe()

        //已选商品总计
        function totalXuan(){
            var sum=0//商品总计
            //遍历每一个选中框对象
            for(var i=0;i<xuans.length;i++){
                //判断当前选中框是否被选中
                if(xuans[i].checked){
                    //获取当前被选中的商品小计
                    var num=xuans[i].parentNode.parentNode.children[5].lastElementChild.innerHTML
                    sum+=parseFloat(num)
                }
            }
            //给已选商品总计赋值
            floot.lastElementChild.previousElementSibling.innerHTML=sum
        }
        totalXuan()
    </script>

  • 19
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,你需要一个简单的 JS 购物车功能,是吗?那么你需要考虑以下几个方面: 1. 商品信息:你需要定义每个商品的名称、价格数量等信息。最好使用一个 JavaScript 对象来存储这些信息。 2. 购物车数据结构:你需要确定购物车的数据结构,例如,你可以使用一个数组来存储购物车中的商品信息。 3. 添加商品:当用户点击“添加购物车”按钮时,你需要将商品信息添加购物车数组中。 4. 计算总价:每当用户添加或删除商品时,你需要重新计算购物车中所有商品总价,并将其显示在页面上。 下面是一个简单的示例代码,可以帮助你实现一个基本的 JS 购物车功能: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JS 购物车</title> </head> <body> <h1>商品列表</h1> <ul> <li data-name="iPhone" data-price="5999">iPhone - 5999元 <button class="add-to-cart">添加购物车</button></li> <li data-name="iPad" data-price="3999">iPad - 3999元 <button class="add-to-cart">添加购物车</button></li> <li data-name="Macbook" data-price="9999">Macbook - 9999元 <button class="add-to-cart">添加购物车</button></li> </ul> <h1>购物车</h1> <table> <thead> <tr> <th>名称</th> <th>单价</th> <th>数量</th> <th>总价</th> <th>操作</th> </tr> </thead> <tbody id="cart"></tbody> <tfoot> <tr> <td colspan="3">总价</td> <td id="total-price">0</td> <td></td> </tr> </tfoot> </table> <script> // 商品列表 const products = [ { name: 'iPhone', price: 5999 }, { name: 'iPad', price: 3999 }, { name: 'Macbook', price: 9999 } ]; // 购物车 let cart = []; // 添加购物车按钮 const addToCartButtons = document.querySelectorAll('.add-to-cart'); addToCartButtons.forEach(button => { button.addEventListener('click', event => { const product = event.target.parentNode; const name = product.dataset.name; const price = product.dataset.price; addToCart(name, price); }); }); // 添加购物车函数 function addToCart(name, price) { // 查找购物车中是否已有该商品 const index = cart.findIndex(item => item.name === name); if (index !== -1) { // 如果已有该商品数量加 1 cart[index].quantity++; } else { // 如果没有该商品添加购物车 cart.push({ name, price, quantity: 1 }); } // 更新购物车界面 renderCart(); } // 删除购物车中的商品 function removeFromCart(index) { cart.splice(index, 1); // 更新购物车界面 renderCart(); } // 渲染购物车界面 function renderCart() { const cartTable = document.querySelector('#cart'); const total = document.querySelector('#total-price'); // 清空购物车表格 cartTable.innerHTML = ''; // 遍历购物车数组,渲染每个商品行 cart.forEach((item, index) => { const row = document.createElement('tr'); // 商品名称 const nameCell = document.createElement('td'); nameCell.textContent = item.name; row.appendChild(nameCell); // 商品单价 const priceCell = document.createElement('td'); priceCell.textContent = item.price; row.appendChild(priceCell); // 商品数量 const quantityCell = document.createElement('td'); quantityCell.textContent = item.quantity; row.appendChild(quantityCell); // 商品总价 const totalCell = document.createElement('td'); totalCell.textContent = item.price * item.quantity; row.appendChild(totalCell); // 操作按钮 const buttonCell = document.createElement('td'); const removeButton = document.createElement('button'); removeButton.textContent = '删除'; removeButton.addEventListener('click', event => { removeFromCart(index); }); buttonCell.appendChild(removeButton); row.appendChild(buttonCell); cartTable.appendChild(row); }); // 计算总价 const totalPrice = cart.reduce((acc, item) => { return acc + item.price * item.quantity; }, 0); total.textContent = totalPrice; } </script> </body> </html> ``` 这段代码包括一个商品列表和一个购物车表格。当用户点击“添加购物车”按钮时,商品信息将被添加购物车数组中,并且购物车表格将被更新以显示所有已添加商品。用户还可以单击“删除”按钮从购物车中删除商品。在购物车表格底部,总价将自动更新以显示所有商品总价

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值