购物车js思路(未封装版)

<head>
	<title>使用Selector API实现购物车客户端计算</title>
	<meta charset="utf-8" />
	<style>
		table {
			width: 600px;
			text-align: center;
			border-collapse: collapse;
		}
		
		td,
		th {
			border: 1px solid black
		}
		
		td[colspan="3"] {
			text-align: right;
		}
		/*tbody>tr>td:last-child{background-color:red}*/
		/*tfoot>tr>td:last-child{background-color:red}*/
	</style>
	<!--<script src="js/6_2.js"></script>-->
</head>

<body>
	<table id="data">
		<thead>
			<tr>
				<th>商品名称</th>
				<th>单价</th>
				<th>数量</th>
				<th>小计</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>iPhone6</td>
				<td>4488</td>
				<td>
					<button>-</button>
					<!--this指当前事件所在的元素对象
	  何时使用: 如果事件处理中需要使用当前元素对象-->
					<span>1</span>
					<button>+</button>
				</td>
				<td>4488</td>
			</tr>
			<tr>
				<td>iPhone6 plus</td>
				<td>5288</td>
				<td>
					<button>-</button>
					<span>1</span>
					<button>+</button>
				</td>
				<td>5288</td>
			</tr>
			<tr>
				<td>iPad Air 2</td>
				<td>4288</td>
				<td>
					<button>-</button>
					<span>1</span>
					<button>+</button>
				</td>
				<td>4288</td>
			</tr>
			<tr>
				<td>RTX 3060ti</td>
				<td>3000</td>
				<td>
					<button>-</button>
					<span>1</span>
					<button>+</button>
				</td>
				<td>3000</td>
			</tr>
		</tbody>
		<tfoot>
			<tr>
				<td colspan="3">Total: </td>
				<td id="total">0</td>
			</tr>
		</tfoot>
	</table>
	<script type="text/javascript">
		//首先获取所有的按钮
        var btns=document.getElementsByTagName("button");
		//因为要个每个按钮都添加点击事件,所以这里先遍历
        for(var i=0;i<btns.length;i++){
			//给每个按钮添加点击事件
            btns[i].onclick=function(){
				//判断按钮类型,做出不同的功能
                if(this.innerHTML=="+"){
					//价格=数量*单价,所以这里来获取数量
                    var span=this.previousElementSibling; //这里不能直接获取span的innerHTML,不然span改变后的值就无法获取了
					//用一个值来存储数量,按钮点一次数量加一,所以这里做一个加法
                    var spanV=parseInt(span.innerHTML)+1; //span.innerHTML获取的值是字符串,所以这里转换一个数据类型,不然会变成字符串的拼接
					//将加后的数量再赋值给span,让它显示在页面上
                    span.innerHTML=spanV;
					//获取价格
                    var price=this.parentNode.previousElementSibling.innerHTML; /*这里因为后面要进行计算,所以我们直接获取他的内容,
                                                                                  这里要注意获取的值与this的关系,不要写错了!!!
                                                                                */
					//这里获取小计,把价格*单价赋值给小计
                    this.parentNode.nextElementSibling.innerHTML=price*spanV;
                }else{
					//思路同上
                    var span=this.nextElementSibling;
                    var spanV=parseInt(span.innerHTML)-1;
                    if(spanV>0){
                        span.innerHTML=spanV;
                        var price=this.parentNode.previousElementSibling.innerHTML;
                        this.parentNode.nextElementSibling.innerHTML=price*spanV;
                    }
                }
                /*获取总额记得要在点击事件里面,为了获取改变后的价格并相加,二是如果不在点击事件里面而和点击事件同级,会无限循环*/
				//获取总额要先获取每个小计,所以这里先获取tbody,再通过tbody获取tr
				//获取tbody
                var tbody=document.getElementsByTagName("tbody")[0]; //下标******非常重要记得写!!这是一个类集合***不写下标就获取不到trs
				//获取tr
                var trs=tbody.children;/*这里不能直接在children后面加上lastElementChild来获取商品价格,因为x.children获取到的是一个集合,
                                        所以加上lastElementChild后获取到的是undefined,而不是我们想要的价格  
                                      */
				//因为tr拿出来是一个类集合,所以需要遍历
                for(var i=0,sum=0;i<trs.length;i++){ //这里的循环是因为trs是一个集合
					//这里每一个小计都是一个一个遍历的,所以创建一个sum用来装小计并计算得到总额
                    sum+=parseInt(trs[i].lastElementChild.innerHTML);
                }
				//将总额赋值给页面中的总额
                total.innerHTML=sum;
            }
        }
		//这里再加一个获取总额是为了后续追加商品时不再需要改动总额,所以总额在html中写为0,具体在这里计算并赋值
        var tbody=document.getElementsByTagName("tbody")[0];  
            var trs=tbody.children;  
            for(var i=0,sum=0;i<trs.length;i++){  
                sum+=parseInt(trs[i].lastElementChild.innerHTML);
            }
        total.innerHTML=sum;
	</script>
</body> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值