Blogger Information
Blog 37
fans 0
comment 0
visits 34710
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
购物车案例
手机用户1607314868
Original
619 people have browsed it

array.every()和array.some()

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文件中,并使用一些特别的语法和关键字

  1. <script type="module">
  2. //声明为模块
  3. //导入 userName变量 从 module1.js文件中
  4. import {userName,hello} from './module1.js';
  5. console.log(userName);
  6. console.log(hello(userName));
  7. //禁止重复声明模块成员
  8. let userName; //报错
  9. //模块成员不允许更新
  10. userName="小李";//报错
  11. //别名导出解决以上报错
  12. import {myName,echo} from './module1.js';
  13. //别名导入也可解决以上报错
  14. import {userName as firstName} from './module1.js';
  15. //导入默认模块 不用{}
  16. import Name from './module1.js';
  17. //导入默认成员和普通成员
  18. import world,{email} from './module1.js';
  19. //-------------------命名空间
  20. // 命名空间是一个容器,内部可以包括任何类型的数据
  21. // 命名空间是一个对象,可以挂载到当前全局中
  22. //导入的所有变量挂载到 namespace 下
  23. import * as namespace from "./module1.js";
  24. </script>

//module1.js 文件

  1. //export导出
  2. export let userName="小明";
  3. export function hello(name){
  4. return "hello" +name;
  5. }
  6. //统一导出 在userName就不用再声明exprot了
  7. export{userName,hello}
  8. //解决在脚本中不能声明问题使用别名导出
  9. export{userName as myName,hello as echo};
  10. //默认的成员
  11. //一个模块只允许一个默认导出
  12. let Name="小红";
  13. export default Name;
  14. //导出列表中,既有默认成员,也有普通成员
  15. function world(name){
  16. return name;
  17. }
  18. let email="admin@php.cn";
  19. //world 别名default 则声明成了默认成员
  20. export{ email,world as default};

购物车案例

点击全选/全不选
原生:

  1. const checkAll=document.querySelector('#check-all');
  2. const items=document.getElementsByName('item');
  3. checkAll.onchange=ev=>{
  4. items.forEach(item=>item.checked=ev.target.checked);
  5. }
  6. //当item都选上则全选按钮选中
  7. items.forEach(item=>(item.onchange=()=>(checkAll.checked=[...items].every(item=>item.checked)))
  8. );

jquery实现

  1. $("#check-all").change(function(){
  2. console.log( $(":checkbox[name='item']"));
  3. $(":checkbox[name='item']").prop('checked',this.checked)
  4. });
  5. $(":checkbox[name='item']").change(ev=>$("#check-all").prop("checked",ev.target.checked));

计算总价:
感觉方法欠妥,但又想不出更好的了。
实现改变状态,自动计算金额

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>购物车</title>
  7. <link rel="stylesheet" href="style.css" />
  8. </head>
  9. <body>
  10. <table>
  11. <caption>
  12. 购物车
  13. </caption>
  14. <thead>
  15. <tr>
  16. <!-- 全选复选框 -->
  17. <th><input type="checkbox" name="checkAll" id="check-all" checked /><label for="check-all">全选</label></th>
  18. <th>图片</th>
  19. <th>品名</th>
  20. <th>单位</th>
  21. <th>单价/元</th>
  22. <th>数量</th>
  23. <th>金额/元</th>
  24. </tr>
  25. </thead>
  26. <tbody>
  27. <tr>
  28. <td>
  29. <input type="checkbox" name="item" value="SN-1020" checked />
  30. </td>
  31. <td>
  32. <a href=""><img src="images/p1.jpg" alt="" /></a>
  33. </td>
  34. <td>iPhone 11</td>
  35. <td></td>
  36. <td class="price">4799</td>
  37. <td><input class="inputt" type="number" min="1" value="1" /></td>
  38. <td class="amount">xxxx</td>
  39. </tr>
  40. <tr>
  41. <td>
  42. <input type="checkbox" name="item" value="SN-1020" checked />
  43. </td>
  44. <td>
  45. <a href=""><img src="images/p2.jpg" alt="" /></a>
  46. </td>
  47. <td>小米pro 11</td>
  48. <td></td>
  49. <td class="price">3999</td>
  50. <td><input class="inputt" type="number" min="1" value="2" /></td>
  51. <td class="amount">xxxx</td>
  52. </tr>
  53. <tr>
  54. <td>
  55. <input type="checkbox" name="item" value="SN-1030" checked />
  56. </td>
  57. <td>
  58. <a href=""><img src="images/p3.jpg" alt="" /></a>
  59. </td>
  60. <td>MacBook Pro</td>
  61. <td></td>
  62. <td class="price">18999</td>
  63. <td><input class="inputt" type="number" min="1" value="1" /></td>
  64. <td class="amount">xxxx</td>
  65. </tr>
  66. <tr>
  67. <td>
  68. <input type="checkbox" name="item" value="SN-1040" checked />
  69. </td>
  70. <td>
  71. <a href=""><img src="images/p4.jpg" alt="" /></a>
  72. </td>
  73. <td>小米75电视</td>
  74. <td></td>
  75. <td class="price">5999</td>
  76. <td><input class="inputt" type="number" min="1" value="2" /></td>
  77. <td class="amount">xxxx</td>
  78. </tr>
  79. <tr>
  80. <td>
  81. <input type="checkbox" name="item" value="SN-1050" checked />
  82. </td>
  83. <td>
  84. <a href=""><img src="images/p5.jpg" alt="" /></a>
  85. </td>
  86. <td>Canon 90D单反</td>
  87. <td></td>
  88. <td class="price">9699</td>
  89. <td><input class="inputt" type="number" min="1" value="1" /></td>
  90. <td class="amount">xxxx</td>
  91. </tr>
  92. </tbody>
  93. <tfoot>
  94. <tr style="font-weight: bolder; font-size: 1.2em">
  95. <td colspan="5">总计:</td>
  96. <td id="sum">xxxx</td>
  97. <td id="total-amount">xxxx</td>
  98. </tr>
  99. </tfoot>
  100. </table>
  101. <div style="width: 90%; margin: 10px auto">
  102. <button style="float: right; width: 100px">结算</button>
  103. </div>
  104. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js">
  105. </script>
  106. <script>
  107. //----jquery---------------------
  108. // $("#check-all").change(function(){
  109. // console.log( $(":checkbox[name='item']"));
  110. // $(":checkbox[name='item']").prop('checked',this.checked)
  111. // });
  112. // $(":checkbox[name='item']").change(ev=>$("#check-all").prop("checked",ev.target.checked));
  113. //点击全选则都选上
  114. const checkAll=document.querySelector('#check-all');
  115. const items=document.getElementsByName('item');
  116. checkAll.onchange=ev=>{
  117. items.forEach(item=>item.checked=ev.target.checked);
  118. }
  119. //------------------------计算总价----------------------------------------
  120. //---------------------根据复选框状态,自动计算金额-----------------------------------------------
  121. // 得到所有台数标签
  122. const numInputs = document.querySelectorAll('tbody input[type="number"]');
  123. //单价标签
  124. const prices=document.querySelectorAll("tbody .price");
  125. //金额标签
  126. const amount=document.querySelectorAll(".amount");
  127. items.forEach(item=>(item.onchange=()=>{
  128. //改变全选按钮状态
  129. checkAll.checked=[...items].every(item=>item.checked);
  130. //将复选框状态放到一个数组里
  131. let numite=[...items].map(item=>item.checked);
  132. for(let i=0;i<numite.length;i++){
  133. if(!numite[i]){
  134. //根据选择状态false 改变 台数和单价的 class
  135. numInputs[i].classList.replace('inputt','inputf');
  136. prices[i].classList.replace('price','pricef');
  137. amount[i].classList.replace('amount','amountf');
  138. }else{
  139. numInputs[i].classList.replace('inputf','inputt');
  140. prices[i].classList.replace('pricef','price');
  141. amount[i].classList.replace('amountf','amount');
  142. }
  143. }
  144. }));
  145. //--------------------弊端:未选中的商品,改变其数量则无法计算出其总金额------------------------------------------
  146. //-------------------------全选按钮没有实现,全选了计算总金额-----------------------------------------------
  147. //------------------------自己实现方式虽然解决了问题了,但总感觉存在弊端,不是完美的解决方式---------------------
  148. const numInput = document.querySelectorAll('tbody input.inputt[type="number"]');
  149. numInput.forEach(input => (onchange = autoCalculate));
  150. // 用户更新数量时触发自动计算
  151. window.onload=autoCalculate;
  152. // 封装一个自动计算的函数
  153. function autoCalculate() {
  154. //计算商品数量
  155. const numbers=document.querySelectorAll('tbody input.inputt[type="number"]');
  156. const numArr=[...numbers].map(item=>item.value*1);
  157. //计算选择了的台数
  158. let sum=numArr.reduce((pre,cur)=>pre+cur);
  159. //计算总金额 数量* 单价
  160. const prices=document.querySelectorAll("tbody .price");
  161. const priceArr=[...prices].map(item=>item.textContent*1);
  162. const amountArr =[priceArr,numArr].reduce((total, curr)=>total.map((item,index)=>item*curr[index]));
  163. // 计算总金额
  164. //只计算选上的数据
  165. let totalAmount = amountArr.reduce((pre, cur) => pre + cur);
  166. //将结果渲染到页面中
  167. document.querySelector('#sum').textContent=sum;
  168. document.querySelector('#total-amount').textContent=totalAmount;
  169. // 每个商品的金额
  170. document.querySelectorAll(".amount").forEach((item, index) => (item.textContent = amountArr[index]));
  171. }
  172. </script>
  173. </body>
  174. </html>
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post