JS实现简单购物车

html内容

<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>100</td><!-- 默认价钱 -->
				<td>
					<button class="active">-</button>
					<input type="text" value="1"><!-- 默认数量为1 -->
					<button class="active">+</button>
				</td>
				<td>100</td>
				<td><button class="del">删除</button></td>
			</tr>
			<tr>
				<td><input type="checkbox"></td>
				<td>鼠标</td>
				<td>50</td><!-- 默认价钱 -->
				<td>
					<button class="active">-</button>
					<input type="text" value="1"><!-- 默认数量为1 -->
					<button class="active">+</button>
				</td>
				<td>50</td>
				<td><button class="del">删除</button></td>
			</tr>
			<tr>
				<td colspan="3">总计</td>
				<td colspan="3" id="sum"></td>
			</tr>
		</table>

购物车JS算法

 获取加减按钮及加减功能:

//获取所有的加减按钮
			var _buttons = document.querySelectorAll(".active");
			_buttons.forEach(function(tag) {
				// tag:每一个 button
				tag.onclick = function() {
					//this指tag
					cal(this, this.innerText);
				}
			})
//单个button的点击
			function cal(tag, param) {
				// tag:指所点击的button按钮 
				//获取input的值
				var _input = tag.parentNode.children[1];
				var num = _input.value * 1;
				//数量加1
				num = eval(num + param + 1);
				if (num < 0) {
					alert("当前数量已经为0!");
					return;
				}
				_input.value = num;
				//小计=单价*数量
				//获取单价   tag的父元素的上一个兄弟         
				var unitPrice = tag.parentNode.previousElementSibling.innerText;
				var total = num * unitPrice;
				//更新小计   tag的父元素的下一个兄弟    
				tag.parentNode.nextElementSibling.innerText = total;
				sum();//每次点击加减按钮更新总计
			}

全选框按钮:

//全选
			var _all = document.querySelector("#all");
			var _inputs = document.querySelectorAll("input[type=checkbox]:not(#all)");
			_all.onclick = function() {
				//获取全选状态
				var status = this.checked;
				_inputs.forEach(function(tag) {
					tag.checked = status;
				})
				//重新计算总计
				sum();
			}
			//反选
			_inputs.forEach(function(tag) {
				//每点击复选框都要重新过滤
				tag.onclick = function() {
					var chboxes = Array.from(_inputs).filter(function(item) {
						return item.checked == true;
					})
					_all.checked = chboxes.length == _inputs.length;
					//重新计算总计
					sum();
				}

			})

总计算法:

			//总计:所有选中的小计相加
			var _sum = document.querySelector("#sum");
			function sum() {
				//所有选中的checkbox
				var chboxes = Array.from(_inputs).filter(function(item) {
					return item.checked == true;
				})
				var sum = 0 //总计
				chboxes.forEach(function(tag) {
					var xiaoji = tag.parentNode.parentNode.children[4].innerText * 1;
					sum += xiaoji;	
				})
				//更新总计
				_sum.innerText = sum;
			}

删除按钮:

//删除:获取所有删除按钮
			var _dels = document.querySelectorAll(".del");
			_dels.forEach(function(tag) {
				// tag:指每一个删除按钮
				tag.onclick = function() {
					if (confirm("确认删除吗?")) {
						tag.parentNode.parentNode.remove();//删除按钮父级的父级
					}
					//更新input个数
					_inputs = document.querySelectorAll("input[type=checkbox]:not(#all)");
					sum();
				}
			})

效果图如下:

总计:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值