js购物车实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <table id="tbl">
		<thead></thead>
		<tbody>
			<tr>
				<td>iphone6</td>
				<td>4488</td>
				<td>
					<button>-</button>
					<span>1</span>
					<button>+</button>
				</td>
				<td>4488</td>
			</tr>
			<tr>
				<td>iphone7</td>
				<td>5488</td>
				<td>
					<button>-</button>
					<span>1</span>
					<button>+</button>
				</td>
				<td>5488</td>
			</tr>
			<tr>
				<td>iphone8</td>
				<td>6488</td>
				<td>
					<button>-</button>
					<span>1</span>
					<button>+</button>
				</td>
				<td>6488</td>
			</tr>
		</tbody>
		<tfoot>
			<tr>
				<td colspan="3">总计:</td>
				<td id="total">0</td>
			</tr>
		</tfoot>
	</table>
	
	<script type="text/javascript">
    //从Dom树中找到btn按钮,保存下来,现在保存下来是一个集合,因为没单独选下标
        var btn = document.getElementsByTagName('button');
    //遍历这个类数组,就能每次都得到一个数组里面的元素,从而不是集合就可以操作    
        for(var i=0;i<btn.length;i++){
    //从Dom树种找到保存商品小计的盒子,是包含在tbody标签里的        
            var yeye = document.getElementsByTagName('tbody')[0],
    //利用找到的盒子关系去找保存商品小计的父元素,                    
                parent = yeye.children;
    //利用小计的父元素可以找到它的儿子,因为是类数组有多个,所以需要遍历数组来获取到每一个单价的父元素            
                for(var x=0,sum=0;x<parent.length;x++){
    //用一个变量保存求和每个单价父元素的最后一个儿子的页面内容,还没点击,默认的价格总计                
                    sum+=parseInt(parent[x].lastElementChild.innerHTML); 
    //然后将保存求和的变量赋值给总价(总价用id,因为id在html中唯一,所以是个Dom树节点,可以直接操作
    //但是这里是计算用户没有+ -操作的总价,所以下面的分支结构if和else里面的代码完了也要计算                                   
                    total.innerHTML=sum;                    
                }
    //给每个button绑定点击事件
            btn[i].onclick=function(){
                
    /*单价为当前次点击元素的父亲的前一个兄弟,直接获取内容,就得到了单价
    因为+的操作和-的操作都要用到它,所以就把它放在外面,不放在if判断语句里*/                
                var dj = this.parentNode.previousElementSibling.innerHTML;
    //判断当前次点击事件的元素内容是不是+,如果是走里面这条路
                if(this.innerHTML=="+"){
    /*定义变量span等于当前次点击事件元素的Dom树里的前一个兄弟,
    这里不能直接获取它的页面内容,否则下面的计数操作就失效,因为获取的是它的内容,
    不是获取它的元素,获取的内容就没办法再给这个元素操作*/                
                    var span = this.previousElementSibling,                    
    //变量count保存住每点击一次 + ,span当前的html内容就+1;                
                    count = parseInt(span.innerHTML)+1;                    
    //然后把它赋值回span的html内容里面                
                    span.innerHTML=count;
    
    //直接把单价和计数相乘的结果赋值回小计,小计为当前次点击元素的父亲的后一个兄弟的页面内容
                    this.parentNode.nextElementSibling.innerHTML=count*dj;
    //根据上面if的判断,如果元素内容是不是+,则走这条路                
                }else{
    //定义变量span等于当前次点击事件元素的Dom树里的后一个兄弟                
                    var span = this.nextElementSibling,
    //变量count保存住每点击一次 - ,span当前的html内容就-1                
                    count = parseInt(span.innerHTML)-1;
    //判断count计数大于0,购物车不允许商品为0,或负数,则进入里面                
                    if(count>0){
    //如果count计数大于0,那么就将count的计算赋值回span的页面内容里面去                    
                        span.innerHTML=count;
    //计算当前计数值乘单价赋值给小计                    
                        this.parentNode.nextElementSibling.innerHTML=count*dj;
                    }                   
                }
    //根据if或else里面的操作看小计是否改变,改变了这里计算出总价            
                for(var x=0,sum=0;x<parent.length;x++){
                        sum+=parseInt(parent[x].lastElementChild.innerHTML);                    
                        console.log(sum)
                        total.innerHTML=sum;                    
                     }
            }
        }


	</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值