js写的简单购物车2

 今天周六,总结一下本周所学的知识,因为上次的购物车并没有写完,所以会更新给购物车添加功能。每一次写都会遇到不同的问题。

(1)html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>购物车</title>
    <link rel="stylesheet" href="index.css">
    <script src="data.js"></script>
</head>
<body>
    <div class="shopCar">
        <div class="control">
            <input type="checkbox" value="" id="all">
            <label for="all">全选</label>
            <input type="button" value="按价格⬆️">
        </div>
        <div class="list">
            <h3>商品</h3>
            <h3>购买数量</h3>
            <h3>单价</h3>
            <h3>小计</h3>
            <h3>操作</h3>
        </div>
        <ul>
            <li>
                <input type="checkbox">
                <h3>摩奥套装</h3>
                <div class="shuzhi">
                    <input class="minus" value="-">
                    <input type="text" num="" value="1">
                    <input class="add" value="+">
                </div>
                <span>¥:<i>99.00</i></span>
                <input type="text" class="xiaoji" >
                <div class="shanchu">
                    <a href="javascript:void(0)">删除</a>
                </div>
            </li>
            <li>
                <input type="checkbox">
                <h3>火锅底料</h3>
                <div class="shuzhi">
                    <input class="minus" value="-">
                    <input type="text" num="" value="1">
                    <input class="add" value="+">
                </div>
                <span>¥:<i>56.00</i></span>
                <input type="text" class="xiaoji" >
                <div class="shanchu ">
                    <a href="javascript:void(0)">删除</a>
                </div>
            </li>
            <li>
                <input type="checkbox">
                <h3>沐浴露</h3>
                <div class="shuzhi">
                    <input class="minus" value="-">
                    <input type="text" num="" value="1">
                    <input class="add" value="+">
                </div>
                <span>¥:<i>74.50</i></span>
                <input type="text" class="xiaoji" >
                <div class="shanchu ">
                    <a href="javascript:void(0)">删除</a>
                </div>
            </li>
            <li>
                <input type="checkbox">
                <h3>坚果</h3>
                <div class="shuzhi">
                    <input class="minus" value="-">
                    <input type="text" num="" value="1">
                    <input class="add" value="+">
                </div>
                <span>¥:<i>23.00</i></span>
                <input type="text" class="xiaoji">
                <div class="shanchu ">
                    <a href="javascript:void(0)">删除</a>
                </div>
            </li>
        </ul>
        <div class="last">
          <label for="allPrice">总计:</label>
          <input id="allPrice" type="text" value="0"> 
        </div>
    </div>
</body>
    <script src="index.js"></script>
</html>

(2)css样式代码

*{
    margin:0;
    padding:0;
    font-size:20px;
}
a{
    text-decoration: none;
}
ul{
    list-style:none;
}
.shopCar{
    margin-left:100px;
}
.control{
    height:50px;
    margin-bottom:20px;
}
.list{
    900px;
    height:50px;
    background:red;
}
.list>h3{
    165px;
    display:inline-block;
    text-align:center;
    line-height:50px;
}
.list h3:nth-child(1){
    margin-left:14px;
}
[type="button"]{
    border:none;
    height:50px;
    250px;
    border-radius:10px;
    outline:none;
    margin-left:50px;
}
ul li{
    900px;
    height:70px;
    background:snow;
    line-height:70px;
    border-bottom:1px red solid;
}
li >input{
    float:left;
    margin-top:30px;
}
li h3{
    165px;
    float:left;
    margin-left:20px;
    text-align:center;
}
li .shuzhi{
    165px;
    height:70px;
    float:left;
    text-align:center;
}
li .shuzhi input:nth-child(1){
    20px;
    text-align:center;
    background:lightgray;
    border:none;
}
li .shuzhi input:nth-child(2){
    40px;
    text-align:center;
}
li .shuzhi input:nth-child(3){
    20px;
    text-align:center;
    background:lightgray;
    border:none;
}
li >span{
    166px;
    text-align:center;
    float:left;
}
li .xiaoji {
    165px;
    float:left;
    text-align:center;
    outline:none;
    border:none;
}
li .shanchu {
    165px;
    float:left;
    text-align:center;
}
.last{
    margin-left:500px;
    margin-top:10px;
}
.last input{
    150px;
}

(3)data.js

var data={
    item:[{
        title:"摩奥套装",
        price:99.00,
        delete:"删除"
    },{
        title:"火锅底料",
        price:56.00,
        delete:"删除"
    },{
        title:"沐浴露",
        price:74.50,
        delete:"删除"
    },{
        title:"坚果",
        price:23.00,
        delete:"删除"
    }]
}

(4)index.js

var data = data;
var item = data.item;

function $(x){
    return document.querySelector(x);
}
function $s(x){
    return document.querySelectorAll(x);
}
var btns=$s("li [type=checkbox]");
var btn=$("#all");
var display=$("#allPrice");
var singlePrice =$s(".xiaoji");
var adds=$s('.add');
var minus=$s('.minus');
var shanchu=$s("li div a");
var Price = 0;

var xuanZhong = true;
var length = btns.length;

// 计算总数
function allPrice(){
    Price=0;
    for(var i=0;i<length;i++){
        if(btns[i].checked){
            Price += parseInt($s("[num='']")[i].value) * item[i].price;
         }
    }
    display.value=Price;
}
function xiaoji(){
    for(var i=0;i<item.length;i++){
        singlePrice[i].value = parseInt($s("[num='']")[i].value) * item[i].price;
    }
}

for(var i=0;i<item.length;i++){
        singlePrice[i].value = parseInt($s("[num='']")[i].value) * item[i].price;
}
// 点击全选按钮
btn.onclick=function(){
    for(var i=0;i<length;i++){
        btns[i].checked=this.checked;
    }
    if(this.checked){
        allPrice();
        xiaoji();
    }
    else{
        Price=0;
        display.value=0;
    }
}
// 添加商品数量和减少商品数量
for(var i=0;i<adds.length;i++){
    adds[i].index=i;
    minus[i].index=i;
    adds[i].onclick=function(){
        var num=$s("[num='']")[this.index].value;
        $s("[num='']")[this.index].value = ++num;
        btns[this.index].checked=true;
        allPrice();
        xiaoji();
        panduan();
    }
    minus[i].onclick=function(){
        var num=$s("[num='']")[this.index].value; 
        if(num <=1){
            $s("[num='']")[this.index].value = 1;
        }
        else{
            $s("[num='']")[this.index].value = --num;
            btns[this.index].checked=true;
        }
        allPrice();
        xiaoji();
        panduan();
    }
}

// 
for(var i=0;i<length;i++){
    btns[i].onclick=function(){
        panduan();
    }
}
function panduan(){
    for(var i=0;i<length;i++){
        var isTrue=true;
        if(btns[i].checked == false){
            btn.checked=false;
        }
        else if(btns[i].checked == true){
            for(var i=0;i<length;i++){
                if(btns[i].checked ==false){
                    isTrue=false;
                }
            }
            if(!isTrue){
                btn.checked=false;
            }
            else{
                btn.checked=true;
            }
        }
        allPrice();
        xiaoji();
    }
}

// 删除商品
for(var i=0;i<length;i++){
    shanchu[i].index=i;
    shanchu[i].onclick=function(){
        $s("li")[this.index].style.display="none";
        btns[this.index].checked=false;
        allPrice();
    }
}

// 价格排序
var button=$("[type=button]");
var ul=$("ul");
var html="";
var isUp=true;

button.onclick=function(){
    html="";
    if(isUp){
        var obj=up();
        this.value="按价格⬆️";
        for(var i=0;i<obj.length;i++){
            html +="<li><input type='checkbox'>"+
                "<h3>"+obj[i].title+"</h3>"+
                "<div class='shuzhi'>"+
                    "<input class='minus' value='-'>"+
                    "<input type='text' num='' value='1'>"+
                    "<input class='add' value='+'></div>"+
                "<span>¥:<i>"+obj[i].price+"</i></span>"+
                "<input type='text' class='xiaoji' value='0'>"+
                "<div class='shanchu'>"+
                "<a href='javascript:void(0)'>"+obj[i].delete+"</a></div></li>"
        }
        ul.innerHTML=html;
        isUp=false;
    }
    else{
        html="";
        var obj=down();
        this.value="按价格⬇️";
        for(var i=0;i<obj.length;i++){
            html +="<li><input type='checkbox'>"+
                "<h3>"+obj[i].title+"</h3>"+
                "<div class='shuzhi'>"+
                    "<input class='minus' value='-'>"+
                    "<input type='text' num='' value='1'>"+
                    "<input class='add' value='+'></div>"+
                "<span>¥:<i>"+obj[i].price+"</i></span>"+
                "<input type='text' class='xiaoji' value='0'>"+
                "<div class='shanchu'>"+
                "<a href='javascript:void(0)'>"+obj[i].delete+"</a></div></li>"
    }
    ul.innerHTML=html;
    isUp=true;
}

}
function up(){
    var obj = item.sort(function(a,b){
        return b.price-a.price;
    });
    return obj;
}
function down(){
    var obj = item.sort(function(a,b){
        return a.price-b.price;
    });
    return obj;
}
原文地址:https://www.cnblogs.com/zxz-h/p/5813483.html