批改状态:合格
老师批语:
every(callback): 对数组中每个成员进行回调处理,只有全部为true,最终才返回true,否则就是false
类似” and “,” 逻辑与 “
例如:[5, 6, 7, 8].every(item => item > 3)
当前数组中的元素全部都大于3返回true
在数组中只要存在大于6的成员,就是返回true[5, 6, 7, 8].some(item => item > 6)
什么是模块?
模块就是一个js代码块
封装成模块的js文件,内部成员对外不可见,除非导出来,模块解决了js的模块化开发与代码封装问题
模块解决了什么问题?
可维护性:每个模块是独立的,各写各个互不影响,出错直接定位责任人
可复制性:只需要一条import指令就可以导入
避免污染全局空间:模块处在自己的命名空间
模块是一个js文件,显然不能像之前一样,将js代码写到html中
模块要到一个独立的js文件中,并使用一些特别的语法和关键字
<script type="module">//声明为模块//导入 userName变量 从 module1.js文件中import {userName,hello} from './module1.js';console.log(userName);console.log(hello(userName));//禁止重复声明模块成员let userName; //报错//模块成员不允许更新userName="小李";//报错//别名导出解决以上报错import {myName,echo} from './module1.js';//别名导入也可解决以上报错import {userName as firstName} from './module1.js';//导入默认模块 不用{}import Name from './module1.js';//导入默认成员和普通成员import world,{email} from './module1.js';//-------------------命名空间// 命名空间是一个容器,内部可以包括任何类型的数据// 命名空间是一个对象,可以挂载到当前全局中//导入的所有变量挂载到 namespace 下import * as namespace from "./module1.js";</script>
//module1.js 文件
//export导出export let userName="小明";export function hello(name){return "hello" +name;}//统一导出 在userName就不用再声明exprot了export{userName,hello}//解决在脚本中不能声明问题使用别名导出export{userName as myName,hello as echo};//默认的成员//一个模块只允许一个默认导出let Name="小红";export default Name;//导出列表中,既有默认成员,也有普通成员function world(name){return name;}let email="admin@php.cn";//world 别名default 则声明成了默认成员export{ email,world as default};
点击全选/全不选
原生:
const checkAll=document.querySelector('#check-all');const items=document.getElementsByName('item');checkAll.onchange=ev=>{items.forEach(item=>item.checked=ev.target.checked);}//当item都选上则全选按钮选中items.forEach(item=>(item.onchange=()=>(checkAll.checked=[...items].every(item=>item.checked))));
jquery实现
$("#check-all").change(function(){console.log( $(":checkbox[name='item']"));$(":checkbox[name='item']").prop('checked',this.checked)});$(":checkbox[name='item']").change(ev=>$("#check-all").prop("checked",ev.target.checked));
计算总价:
感觉方法欠妥,但又想不出更好的了。
实现改变状态,自动计算金额
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>购物车</title><link rel="stylesheet" href="style.css" /></head><body><table><caption>购物车</caption><thead><tr><!-- 全选复选框 --><th><input type="checkbox" name="checkAll" id="check-all" checked /><label for="check-all">全选</label></th><th>图片</th><th>品名</th><th>单位</th><th>单价/元</th><th>数量</th><th>金额/元</th></tr></thead><tbody><tr><td><input type="checkbox" name="item" value="SN-1020" checked /></td><td><a href=""><img src="images/p1.jpg" alt="" /></a></td><td>iPhone 11</td><td>台</td><td class="price">4799</td><td><input class="inputt" type="number" min="1" value="1" /></td><td class="amount">xxxx</td></tr><tr><td><input type="checkbox" name="item" value="SN-1020" checked /></td><td><a href=""><img src="images/p2.jpg" alt="" /></a></td><td>小米pro 11</td><td>部</td><td class="price">3999</td><td><input class="inputt" type="number" min="1" value="2" /></td><td class="amount">xxxx</td></tr><tr><td><input type="checkbox" name="item" value="SN-1030" checked /></td><td><a href=""><img src="images/p3.jpg" alt="" /></a></td><td>MacBook Pro</td><td>台</td><td class="price">18999</td><td><input class="inputt" type="number" min="1" value="1" /></td><td class="amount">xxxx</td></tr><tr><td><input type="checkbox" name="item" value="SN-1040" checked /></td><td><a href=""><img src="images/p4.jpg" alt="" /></a></td><td>小米75电视</td><td>台</td><td class="price">5999</td><td><input class="inputt" type="number" min="1" value="2" /></td><td class="amount">xxxx</td></tr><tr><td><input type="checkbox" name="item" value="SN-1050" checked /></td><td><a href=""><img src="images/p5.jpg" alt="" /></a></td><td>Canon 90D单反</td><td>台</td><td class="price">9699</td><td><input class="inputt" type="number" min="1" value="1" /></td><td class="amount">xxxx</td></tr></tbody><tfoot><tr style="font-weight: bolder; font-size: 1.2em"><td colspan="5">总计:</td><td id="sum">xxxx</td><td id="total-amount">xxxx</td></tr></tfoot></table><div style="width: 90%; margin: 10px auto"><button style="float: right; width: 100px">结算</button></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script><script>//----jquery---------------------// $("#check-all").change(function(){// console.log( $(":checkbox[name='item']"));// $(":checkbox[name='item']").prop('checked',this.checked)// });// $(":checkbox[name='item']").change(ev=>$("#check-all").prop("checked",ev.target.checked));//点击全选则都选上const checkAll=document.querySelector('#check-all');const items=document.getElementsByName('item');checkAll.onchange=ev=>{items.forEach(item=>item.checked=ev.target.checked);}//------------------------计算总价----------------------------------------//---------------------根据复选框状态,自动计算金额-----------------------------------------------// 得到所有台数标签const numInputs = document.querySelectorAll('tbody input[type="number"]');//单价标签const prices=document.querySelectorAll("tbody .price");//金额标签const amount=document.querySelectorAll(".amount");items.forEach(item=>(item.onchange=()=>{//改变全选按钮状态checkAll.checked=[...items].every(item=>item.checked);//将复选框状态放到一个数组里let numite=[...items].map(item=>item.checked);for(let i=0;i<numite.length;i++){if(!numite[i]){//根据选择状态false 改变 台数和单价的 classnumInputs[i].classList.replace('inputt','inputf');prices[i].classList.replace('price','pricef');amount[i].classList.replace('amount','amountf');}else{numInputs[i].classList.replace('inputf','inputt');prices[i].classList.replace('pricef','price');amount[i].classList.replace('amountf','amount');}}}));//--------------------弊端:未选中的商品,改变其数量则无法计算出其总金额------------------------------------------//-------------------------全选按钮没有实现,全选了计算总金额-----------------------------------------------//------------------------自己实现方式虽然解决了问题了,但总感觉存在弊端,不是完美的解决方式---------------------const numInput = document.querySelectorAll('tbody input.inputt[type="number"]');numInput.forEach(input => (onchange = autoCalculate));// 用户更新数量时触发自动计算window.onload=autoCalculate;// 封装一个自动计算的函数function autoCalculate() {//计算商品数量const numbers=document.querySelectorAll('tbody input.inputt[type="number"]');const numArr=[...numbers].map(item=>item.value*1);//计算选择了的台数let sum=numArr.reduce((pre,cur)=>pre+cur);//计算总金额 数量* 单价const prices=document.querySelectorAll("tbody .price");const priceArr=[...prices].map(item=>item.textContent*1);const amountArr =[priceArr,numArr].reduce((total, curr)=>total.map((item,index)=>item*curr[index]));// 计算总金额//只计算选上的数据let totalAmount = amountArr.reduce((pre, cur) => pre + cur);//将结果渲染到页面中document.querySelector('#sum').textContent=sum;document.querySelector('#total-amount').textContent=totalAmount;// 每个商品的金额document.querySelectorAll(".amount").forEach((item, index) => (item.textContent = amountArr[index]));}</script></body></html>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号