简单的购物车功能

效果图如下
在这里插入图片描述
代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			table{
				width: 600px;
				height: 300px;
				margin: 0 auto;
				text-align:center;
				border-collapse: collapse;
			}
			th{
				background: pink;
				height: 50px;
			}
			tr{
				height: 50px;
			}
        </style>
	</head>
	<body>
		<table border="1px" id="table1">
			<tbody id="tbody">
				
			
			<tr>
				<th>商品名称</th>
				<th>数量</th>
				<th>单价</th>
				<th>小计</th>
				<th>操作</th>
			</tr>
			<tr>
				<td class="goods-name">红烧排骨</td>
				<td>
					<button class="btn1">-</button>
					<span class="goods-num">0</span>
					<button class="btn1">+</button>
				</td>
				<td>
					单价:<span class="goods-price">50</span>
				</td>
				<td>
					小计:<span class="goods-single-price">0</span>
				</td>
				<td>
					操作:<input type="button" value="删除"/>
				</td>
			</tr>
			<tr>
				<td class="goods-name">油焖大虾</td>
				<td>
					<button class="btn1">-</button>
					<span class="goods-num">0</span>
					<button class="btn1">+</button>
				</td>
				<td>
					单价:<span class="goods-price">100</span>
				</td>
				<td>
					小计:<span class="goods-single-price">0</span>
				</td>
				<td>
					操作:<input type="button" value="删除"/>
				</td>
			</tr>
			<tr id="list">
				<td colspan="5">
					一共<span id="goods-total-num">0</span>件商品,共计花费<span id = "goods-total-price">0</span>元。
				</td>
			</tr>
			</tbody>
		</table>
		
		<table border="1px" id="table2">
			<tr>
				<th>商品名称</th>
				<th>单价</th>
				<th>操作</th>
			</tr>
			<tr>
				<td>老婆饼</td>
				<td>
					单价:<span class="goods-price">50</span>
				</td>
				<td>
					操作:<button onclick="AddGoods(0)" class="Add">添加</button>
				</td>
			</tr>
			<tr>
				<td>酸菜鱼</td>
				
				<td>
					单价:<span class="goods-price">100</span>
				</td>
				
				<td>
					操作:<button onclick="AddGoods(1)" class="Add">添加</button>
				</td>
			</tr>
			<tr>
				<td>理想大虾</td>	
				<td>
					单价:<span class="goods-price">100</span>
				</td>
				<td>
					操作:<button onclick="AddGoods(2)" class="Add">添加</button>
				</td>
			</tr>
			
		</table>
	</body>
</html>
<script>
	//购物车里有多少商品
//合计所有商品花了多少钱

class Cart{
	
	getGoodsNumAndUpdate(){
		let oGoodsNum=document.getElementsByClassName("goods-num");
		let totalNum=0;
		for(let i=0;i<oGoodsNum.length;i++){
			totalNum += Number(oGoodsNum[i].innerHTML);
		}
		let oGoodsTotalNum=document.getElementById("goods-total-num");
		oGoodsTotalNum.innerHTML=totalNum;
	}
	
	//总共的价格
	getGoodsPriceAndUpdate(){
		let oGoodsPrice =document.getElementsByClassName("goods-single-price");
		let goodsSinglePrice=0;
		for(let i=0;i<oGoodsPrice.length;i++){
			goodsSinglePrice += Number(oGoodsPrice[i].innerHTML);
		}
		let oGoodsTotalPrice =document.getElementById("goods-total-price");
		oGoodsTotalPrice.innerHTML=goodsSinglePrice;
	}
	//计算小计
	getGoodsSinglePrice(num,print){
		return num*print;
	}
	
	//增加货物
	goodsAdd(btn){
		//找到btn的数量
		let oGoodsNum =btn.previousElementSibling;
		oGoodsNum.innerHTML=Number(oGoodsNum.innerHTML)+1;
		//找单价的元素
		let oGoodsPrice=btn.parentNode.nextElementSibling.firstElementChild;
		//找小计的元素
		let oGoodsSinglPrice=btn.parentNode.nextElementSibling.nextElementSibling.firstElementChild;
		//给小计赋值
		oGoodsSinglPrice.innerHTML=this.getGoodsSinglePrice(oGoodsNum.innerHTML,oGoodsPrice.innerHTML);
		
		this.getGoodsNumAndUpdate();
		this.getGoodsPriceAndUpdate();
	}
	
	//减少货物
	goodsMin(btn){
		//找到btn的数量
		let oGoodsNum=btn.nextElementSibling;
		if(oGoodsNum.innerText>0){
			oGoodsNum.innerHTML=Number(oGoodsNum.innerHTML)-1;
			//找单价的元素
			let oGoodsPrice=btn.parentNode.nextElementSibling.firstElementChild;
			//找小计的元素
			let oGoodsSinglPrice=btn.parentNode.nextElementSibling.nextElementSibling.firstElementChild;
			//给小计赋值
			oGoodsSinglPrice.innerHTML=this.getGoodsSinglePrice(oGoodsNum.innerHTML,oGoodsPrice.innerHTML);
			
			this.getGoodsNumAndUpdate();
			this.getGoodsPriceAndUpdate();
		}
	}
	
	//删除行
	delGoods(btn){
		let oTr=btn.parentNode.parentNode;
		oTr.remove();
		
		this.getGoodsNumAndUpdate();
		this.getGoodsPriceAndUpdate();
	}
	

	//判断按下的是哪个按钮
	eventBind(){
		let oBtn=document.getElementsByClassName("btn1");
		console.log(oBtn);
		let that=this;
		for(let i=0;i<oBtn.length;i++){
			if(i%2==0){
				oBtn[i].onclick=function(){

					that.goodsMin(this);
				}
			}else{
				oBtn[i].onclick=function(){
					console.log("++");
					that.goodsAdd(this);
				}
			}
		}
		let oDelBtn=document.getElementsByTagName("input");
		for(let i=0;i<oDelBtn.length;i++){
			oDelBtn[i].onclick=function(){
				that.delGoods(this);
			}
		}
		
	}
	}
//添加行
 function AddGoods(num){
		var olist = document.getElementById("list");
		var oTbody=document.getElementById("tbody");
		var oAdd=document.getElementsByClassName("Add");
		//获取商品列表里的商品名
		let goodname=oAdd[num].parentNode.parentNode.firstElementChild.innerHTML;
		//这里获取价格错了,没有获取子元素
		let goodprice=oAdd[num].parentNode.previousElementSibling.children[0].innerHTML;
		//获取购物车里的商品名称
		let oldgoodname=document.getElementsByClassName("goods-name")
		let flag = true;
		for(var i=0;i<oldgoodname.length;i++){//遍历
			
			if(oldgoodname[i].innerHTML==goodname){ //如果购物车已经存在要添加的商品名
				
				c.goodsAdd(oldgoodname[i].nextElementSibling.lastElementChild);//调用增加货物
				flag =false;
				break;
			}
			
		}
		if(flag){ //如果不存在增加字符串
			let str=`<td class="goods-name">${goodname}</td>
				<td>
					<button class="btn1">-</button>
					<span class="goods-num">0</span>
					<button class="btn1">+</button>
				</td>
				<td>
					单价:<span class="goods-price">${goodprice}</span>
				</td>
				<td>
					小计:<span class="goods-single-price">0</span>
				</td>
				<td>
					操作:<input type="button" value="删除"/>
				</td>`
				let oTr=document.createElement("tr"); //定义一个行标签
				oTr.innerHTML=str;
				oTbody.insertBefore(oTr,olist);   //在olist前面加一行
				c.goodsAdd(oldgoodname[i].nextElementSibling.lastElementChild);//调用增加行数
				c.eventBind();//判断按钮
		}
		flag=true;
		
	}
let c=new Cart();
c.eventBind();


</script>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值