效果图如下
代码:
<!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>