
<!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>选项卡</title><style>.box {width: 28em;display: grid;grid-template-columns: 3em 1fr;border-left: 1px solid #ccc;}.box ul {margin: 0;padding: 0;}.box li {list-style: none;/* height: 2em; */}.box li a {text-decoration: none;}.box li:hover {cursor: pointer;}.box .content {background-color: lightgreen;display: none;place-self: center start;}.box .content.active {display: block;}.box .menu li.active {background-color: lightgreen;}</style></head><body><div class="box"><!-- 1. 标签 --><!-- 子元素上的点击事件会冒泡到父元素,利用这个特点,只需要给父元素添加点击事件就可以了 --><ul class="menu" onclick="show()"><!-- 先给默认显示的标签和对应的内容添加 class="active"处于激活状态/可见 --><!-- 使用自定义属性data-index使标签和与之对应的内容进行绑定 --><li data-index="1" class="active">本省</li><li data-index="5">全国</li><li data-index="8">防疫</li></ul><!-- 2. 内容 --><ul class="content active" data-index="1"><li><a href="">刚刚通报!2021安徽GDP预计破4万亿元!</a></li><li><a href="">刚刚通报!2021安徽GDP预计破4万亿元!</a></li><li><a href="">刚刚通报!2021安徽GDP预计破4万亿元!</a></li><li><a href="">刚刚通报!2021安徽GDP预计破4万亿元!</a></li><li><a href="">刚刚通报!2021安徽GDP预计破4万亿元!</a></li></ul><ul class="content" data-index="5"><li><a href="">总书记关心北京冬奥会,冬残奥会筹办纪实</a></li><li><a href="">总书记关心北京冬奥会,冬残奥会筹办纪实</a></li><li><a href="">总书记关心北京冬奥会,冬残奥会筹办纪实</a></li><li><a href="">总书记关心北京冬奥会,冬残奥会筹办纪实</a></li><li><a href="">总书记关心北京冬奥会,冬残奥会筹办纪实</a></li></ul><ul class="content" data-index="8"><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li></ul><ul class="content" data-index="8"><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li><li><a href="">坚持“动态清零”不动摇(人民论坛)</a></li></ul></div><script>function show() {// 1. 事件触发者(目标)let target = event.target;console.log('选择了:', target.textContent);//2.移除menu下所有li元素中为active的class[...target.parentNode.children].forEach(item => {item.classList.remove('active');});//3.添加active为classtarget.classList.add('active');//4.获取data-index属性let index = target.dataset.index;console.log('选中的下标:', index);//5.移除content下所有li元素中为active的class[...target.parentNode.parentNode.children].forEach(item => {item.classList.remove('active');});//6.为content下对应的li元素添加activelet content = document.querySelectorAll('.content');[...content].find(item => item.dataset.index == index).classList.add('active');}</script></body></html>

<!DOCTYPE html><html lang="zh-CN"><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>购物车</title><style>.box {width: 22em;height: 2em;}.list > li {height: 1.6em;background-color: #efefef;display: grid;grid-template-columns: repeat(5, 3em);gap: 1em;place-items: center right;border-bottom: 1px solid #ccc;}.list > li:first-of-type {background-color: lightseagreen;color: white;}.list > li:hover:not(:first-of-type) {cursor: pointer;background-color: lightcyan;}.list > li input[type='number'] {width: 3em;border: none;outline: none;text-align: center;font-size: 1em;background-color: transparent;}.list > li:last-of-type span.total-num,.list > li:last-of-type span.total-amount {grid-column: span 2;place-self: center right;color: lightseagreen;}.account {float: right;background-color: lightseagreen;color: white;border: none;outline: none;width: 4.5em;height: 1.8em;}.account:hover {background-color: coral;cursor: pointer;}</style></head><body><div class="box"><div class="selectAll"><!-- checkAll(): 当全选按钮的状态发生变化化,触发该事件 change --><input type="checkbox" class="check-all" name="check-all" onchange="checkAll()" checked /><label for="check-all">全选</label></div><ul class="list" onchange="change()"><li><span>选择</span><span>品名</span><span>数量</span><span>单价</span><span>金额</span></li><li><input type="checkbox" checked /><span class="content">手机</span><input type="number" value="1" min="1" class="num" /><span class="price">100</span><span class="amount">0</span></li><li><input type="checkbox" checked /><span class="content">电脑</span><input type="number" value="2" min="1" class="num" /><span class="price">200</span><span class="amount">0</span></li><li><input type="checkbox" checked /><span class="content">相机</span><input type="number" value="3" min="1" class="num" /><span class="price">300</span><span class="amount">0</span></li><li><span>总计:</span><span class="total-num">0</span><span class="total-amount">0</span></li></ul><button class="account">结算</button></div><script>// 1. 全选function checkAll() {// 1. 全选按钮状态let status = event.target.checked;// 2. 根据状态动态设置所有商品的状态let items = document.querySelectorAll('.list li input[type="checkbox"]');items.forEach(item => (item.checked = status));change();}//购物车发生改变时,计算总价和总数量,金额,并显示到页面上//使用事件冒泡来处理变化function change() {let target = event.target;console.log('选择了:', event.target);//1.当商品未全部选中时,全选按钮不选中let items = document.querySelectorAll('.list li input[type="checkbox"]');document.querySelector('.selectAll input[type="checkbox"]').checked = [...items].every(item => item.checked);//2.获取所有的选中的商品let checkItems = document.querySelectorAll('.list li input[type="checkbox"]:checked');console.log(checkItems);//3.计算金额,总金额和总数量,并显示到页面上getAmount(checkItems);getTotalAmount(checkItems);getTotalNum(checkItems);}// 当页面加载的时候自动计算window.onload = change;//计算选中的总数量,并更新到页面上function getTotalNum(checkItems) {let totalNum = 0;checkItems.forEach(item => {totalNum += parseInt(item.nextElementSibling.nextElementSibling.value);});document.querySelector('.total-num').innerText = totalNum;}//计算选中的总金额,并更新到页面上function getTotalAmount(checkItems) {let totalAmount = 0;checkItems.forEach(item => {totalAmount +=parseInt(item.nextElementSibling.nextElementSibling.value) *parseInt(item.nextElementSibling.nextElementSibling.nextElementSibling.innerText);});document.querySelector('.total-amount').innerText = totalAmount;}//计算选中单个商品的金额并更新到页面上function getAmount(checkItems) {checkItems.forEach(item => {let num = item.parentNode.querySelector('.num').value;let price = item.parentNode.querySelector('.price').innerText;item.parentNode.querySelector('.amount').innerText = num * price;});}//把选中的商品的数量和金额更新到页面上,单个商品总金额也更新function updateTotalNumAndAmount() {let totalNum = getTotalNum(checkItems);let totalAmount = getTotalAmount(checkItems);getAmount(checkItems);document.querySelector('.total-num').innerText = totalNum;document.querySelector('.total-amount').innerText = totalAmount;}</script></body></html>
相关推荐
© 2020 asciim码
人生就是一场修行