原生js购物车

HTML部分

 购物车添加部分

购物车减去部分 

 全选反选

 单选

总计

 

效果图

 

完整代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<table border="1" cellspacing="0" cellpadding="0">
			<tr>
				<th><input type="checkbox" id="all" /></th>
				<th>名称</th>
				<th>价格</th>
				<th>数量</th>
				<th>小计</th>
				<th>操作</th>
			</tr>
			<tr>
				<td><input type="checkbox" /></td>
				<td>键盘</td>
				<td>399</td>
				<td>
					<button type="button" onclick="minus(this)">-</button>
					<input type="text" value="1" />
					<button type="button"  onclick="add(this)">+</button>
				</td>
				<td>399</td>
				<td><button type="button">删除</button></td>
			</tr>
			<tr>
				<td><input type="checkbox" /></td>
				<td>鼠标</td>
				<td>499</td>
				<td>
					<button type="button" onclick="minus(this)">-</button>
					<input type="text" value="1" />
					<button type="button" onclick="add(this)">+</button>
				</td>
				<td>499</td>
				<td><button type="button">删除</button></td>
			</tr>
			<tr>
				<td colspan="3">总计</td>
				<td colspan="3" id="sum"></td>
			</tr>
		</table>
	</body>
	<script type="text/javascript" src="购物车.js">
		
	</script>
</html>
<script>
    //购物车添加数量
function add(btn) {
	//数量*价格
	//1、获取到当前数量+1,并更新input框
	var num = btn.parentElement.children[1].value;
	btn.parentElement.children[1].value = ++num;
	//2、获取单价,字符串
	var price = btn.parentElement.previousElementSibling.innerText
	//3、计算小计,并更新渲染
	var total = parseFloat(price) * num;
	btn.parentElement.nextElementSibling.innerText = total;
	
	//总计
	 calSum();
}

//购物车减去数量
function minus(btn) {
	//数量*价格
	//1、获取到当前数量+1,并更新input框
	var num = btn.parentElement.children[1].value;
	if (num == 0) {
		return;
	}
	btn.parentElement.children[1].value = --num;
	//2、获取单价,字符串
	var price = btn.parentElement.previousElementSibling.innerText
	//3、计算小计,并更新渲染
	var total = parseFloat(price) * num;
	btn.parentElement.nextElementSibling.innerText = total;
	
	//总计
	 calSum();
}
 
//全选和反选
var _all = document.getElementById("all");
var _sum = document.getElementById("sum");
//选出除了全选的复选框
var _boxes = document.querySelectorAll("input[type=checkbox]:not(#all)")
//全选
_all.onclick = function() {
	//checked:获取全框的选中状态
	//this:当前的点击对象
	var status = this.checked;
	_boxes.forEach(function(tag) {
		//下边三个选框跟全选框的状态保持一致
		tag.checked = status;
	})
	calSum();
}
 
//单选
_boxes.forEach(function(tag) {
	tag.onclick = function() {
		//过滤出所有被选中的复选框
		var chs = Array.from(_boxes).filter(function(item) {
			return item.checked == true;
		})
		//如果过滤出得选中的复选框长度等于所有复选框长度,说明全选
		_all.checked = chs.length === _boxes.length;
		
		//总计
		 calSum();
	}
 
})
 
//总计
function  calSum(){
	var sum=0;
	_boxes = document.querySelectorAll("input[type=checkbox]:not(#all)")
	var newBoxes=Array.from(_boxes).filter(function(tag){
		return tag.checked==true;
	})
	
	newBoxes.forEach(function(tag){
		sum+=parseFloat(tag.parentElement.parentElement.children[4].innerText)
	})
	
	_sum.innerText=sum;
 
}
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值