目录
-
- <style>
- #int {
- display: none;
- }
- style>
-
- <body>
- <div id="box">
- <button id="addshop">添加商品button>
- <div id="int">
- <input type="text" placeholder="输入商品" id="name"><br />
- <input type="text" placeholder="输入价格" id="price"><br />
- <button id="addok">添加button>
- div>
- <table>
- <thead>
- <tr>
- <th>全选<input type="checkbox" id="all">th>
- <th>序号th>
- <th>姓名th>
- <th>价格th>
- <th>操作th>
- tr>
- thead>
- <tbody>
-
- tbody>
- table>
- div>
- body>
- <script>
- let btn = document.getElementById('addshop')
- let int = document.getElementById('int')
- let name = document.getElementById('name')
- let price = document.getElementById('price')
- let addok = document.getElementById('addok')
- let tbody = document.querySelector("tbody")
- // 定义一个空数组
- let arr = []
- // 添加商品弹出对话框
- btn.onclick = () => {
- int.style.display = 'block'
- }
- // 添加商品按钮
- addok.onclick = () => {
- if (name.value != "" && price.value != "") {
- let obj = {
- name: name.value,
- price: price.value,
- num:1,
- isCheck:false,
- }
- arr.push(obj)
- // 遮罩层消失
- int.style.display = 'none'
- render(arr)
- } else {
- alert("请正确填写")
- }
- }
- int.onclick = () => {
- // 阻止冒泡 和 捕获
- event.stopPropagation()
- }
- // 渲染arr
- function render(arr) {
- let str = ""
- arr.forEach((item, index) => {
- str += `
-
-
-
${index + 1} -
${item.name} -
${item.price} -
-
- `
- })
- console.log(str)
- tbody.innerHTML = str
- }
- // 删除按钮
- function del(i){
- console.log(i);
- arr.splice(i,1)
- render(arr)
- }
- // 添加购物车
- function addCar(index){
- let car=[]
- let getlist=localStorage.getItem('token')
- if(getlist){
- car=JSON.parse(getlist)
- }
- // 查找商品,如果不等于-1,说明商品已经存在,存在就添加商品的数量
- let list=car.findIndex((item)=>{
- return item.name==arr[index].name
- })
- if(list != -1){
- // 商品存在,添加商品数量
- car[list].num++
- }else{
- // 商品不存在,添加购物车
- car.push(arr[index])
- }
- // 保存到本地
- window.localStorage.setItem('token',JSON.stringify(car))
- // 跳转购物车页面
- location.href='car.html'
- }
- script>
由于我们涉及到了页面跳转,所以我们把数据保存在本地,然后在购物车页面取到数据,然后再对数据进行渲染
- <style>
- h4 {
- margin-left: 50%;
- margin-top: 10px;
- }
- style>
-
- <body>
- <h4>购物车页面h4>
- <button onclick="back()">返回button>
- <table>
- <thead>
- <tr>
- <th>全选<input type="checkbox" id="all" onchange=quan() >th>
- <th>序号th>
- <th>姓名th>
- <th>价格 <button onclick="jiang()">降序button>th>
- <th>数量th>
- <th>小计th>
- <th>操作th>
- tr>
- thead>
- <tbody>
-
- tbody>
- table>
- <p>总计:<span id="total">span>p>
- <button onclick="delall()">选中删除button>
- body>
- <script>
- let alll=document.getElementById('all')
- let tbody = document.querySelector("tbody")
- //定义一个空数组
- let car = []
- //从本地获取到数据
- let getlist = localStorage.getItem('token')
- if (getlist) {
- car = JSON.parse(getlist)
- }
- render(car)
- // 降序
- function jiang() {
- car.sort((a, b) => {
- return b.price - a.price
- })
- render(car)
- }
- //数据渲染
- function render(car) {
- let str = ""
- car.forEach((item, index) => {
- str += `
-
-
${index}) ${item.isCheck?'checked':''}> -
${index + 1} -
${item.name} -
${item.price} -
${item.num} -
${item.price * item.num} -
-
- `
- })
- tbody.innerHTML = str
- total()
- }
- var num = localStorage.getItem('token')
- // console.log(JSON.parse(num)[0].num);
- // 选中删除
- function delall(){
- let bb=JSON.parse(localStorage.getItem('token'))
- let list=bb.filter((item)=>{
- return item.isCheck===false
- })
- localStorage.setItem('token',JSON.stringify(list) )
- render(list)
-
- }
- //数量减
- function jian(e) {
- let bb=JSON.parse(localStorage.getItem('token'))
- if( bb[e].num=1){
- bb[e].num=1
- }else{
- bb[e].num--
- }
- localStorage.setItem('token',JSON.stringify(bb) )
- render(bb)
- }
- // 数量加
- function jia(e) {
- let bb=JSON.parse(localStorage.getItem('token'))
- bb[e].num++
- console.log(bb);
- localStorage.setItem('token',JSON.stringify(bb) )
- render(bb)
-
- }
- // 返回按钮
- function back() {
- location.href = 'shop.html'
- }
- // 删除
- function del(i) {
- console.log(i);
- car.splice(i, 1)
- render(car)
- }
- // 反选
- function xuan(e){
- let bb=JSON.parse(localStorage.getItem('token'))
- // bb[e].isCheck=bb[e].isCheck
- console.log(bb[e].isCheck);
- bb[e].isCheck=!bb[e].isCheck
- localStorage.setItem('token',JSON.stringify(bb) )
- if(bb.every((item)=>{return item.isCheck}
- )){
- alll.checked=true
- }else{
- alll.checked=false
- }
- render(bb)
-
- }
-
- // 全选
- function quan(){
- let bb=JSON.parse(localStorage.getItem('token'))
- if(alll.checked){
- bb.forEach((item)=>{ return item.isCheck=true})
- }else{
- bb.forEach((item)=>{ return item.isCheck=false})
- }
- localStorage.setItem('token',JSON.stringify(bb) )
- render(bb)
- }
- // 总计
- function total(){
- let bb=JSON.parse(localStorage.getItem('token'))
- let list=bb.filter((item)=>{
- return item.isCheck === true
- })
- let sum=0
- list.map((item,index)=>{
- sum+=item.price*item.num
- })
- // 获取span标签的dom节点
- let total=document.getElementById('total')
- total.innerHTML=sum
-
- }
-
- script>
反选:我们传入每行数据的id,通过id获取每行数据的选中状态,使用every方法,如果每一行数据都为true,全选状态也为true
全选:绑定一个onchange事件,如果全选按钮状态为true,那么数据循环状态变为true
绑定onclick事件,传递id值,从本地获取到数据的数量,然后对数据进行加减操作,最后再保存到本地
从本地获取数据,过滤数据,然后返回选中状态为false的数据,保存到本地,rander一下数据
获取本地数据,筛选出来状态为true的数据,定义一个变量,循环数据数量相加,获取总价的dom节点,使用innerHTML对数据进行重写,总价就会随数据的变化而变化