模拟购物车的实现过程(详细讲解)

简介: 我们把购物车的步骤分为了三步 一、加入购物车 二、购物车中物品数量的控制 三、计算金额下面为实现的代码;(代码也是按照上面的思路写的大家可以看看,看不懂可以参照上面的图片上的步骤) 购物车 h1 { ...

我们把购物车的步骤分为了三步
一、加入购物车
这里写图片描述
二、购物车中物品数量的控制
这里写图片描述
三、计算金额

这里写图片描述

下面为实现的代码;(代码也是按照上面的思路写的大家可以看看,看不懂可以参照上面的图片上的步骤)

<!DOCTYPE html>
<html>
  <head>
    <title>购物车</title>
    <meta charset="utf-8" />
    <style type="text/css">
      h1 {
        text-align:center;
      }
      table {
        margin:0 auto;
        width:60%;
        border:2px solid #aaa;
        border-collapse:collapse;
      }
      table th, table td {
        border:2px solid #aaa;
        padding:5px;
      }
      th {
        background-color:#eee;
      }
    </style>
    <script type="text/javascript">
        //加入购物车
        //调用函数时传入this(正在点击的那个按钮)
        //声明函数来接受该值,参数名不能用关键字
        function add_shoppingcart(btn){
            console.log(btn);
            //获取此按钮的爷爷tr
            var tr = btn.parentNode.parentNode;
            console.log("tr");
            console.log(tr);
            //获取此tr的所有孩子tds
            var tds=tr.getElementsByTagName("td");
            console.log("tds");
            console.log(tds);
            //获取第0个孩子的内容(商品名)
            var spm=tds[0].innerText;
            console.log(spm);
            /* var str="";
            var ntr =document.createElement("tr");
            for (var i = 0; i < 2; i++) {
                var sp=tds[i].innerText;
                str+="<td>"+sp+"</td>";
                console.log(str);
            }
             ntr.innerHTML=str;
             var tbody=document.getElementById("goods");
             tbody.appendChild(ntr);  */
            //获取第一个孩子的内容(单价)
            var dj=tds[1].innerText;
            console.log(dj);
            //创建一个新的ntr
            var ntr =document.createElement("tr");
            //给这个新tr设置内容
            //ntr.innerHTML="拼td的内容";
            //其中商品名和单价拼之前获取的变量
            var str='<td>'+spm+'</td>'+
            '<td>'+dj+'</td>'+
            '<td align="center">'+
              '<input type="button" value="-" onclick="decrease(this)"/> '+
              '<input type="text" size="3" readonly value="1"/> '+
              '<input type="button" value="+" onclick="increase(this);"/>'+
            '</td>'+
            '<td>'+dj+'</td>'+
            '<td align="center"><input type="button" value="x" onclick="del(this);"/></td>';
            ntr.innerHTML=str;
            console.log(ntr);
            //获取tbody(id="goods")
            var tbody=document.getElementById("goods");
            //向tbody下追加新tr
            tbody.appendChild(ntr); 
            sum();
        }

        /* 删除 */
        function del(btn){
            //获取按钮的爷爷
            var tr=btn.parentNode.parentNode;
            //删除这个tr
            tr.parentNode.removeChild(tr);
            sum();
        }
        //+操作
        function increase(btn){
            //获取按钮的父亲的孩子

            var sl=btn.parentNode.getElementsByTagName("input")[1];
            var a=parseInt(sl.value)+1;
            sl.value=a;
            //tr
            console.log("价格");
            var tr=btn.parentNode.parentNode;
            var td1=tr.getElementsByTagName("td");
            console.log(td1[1].innerText);
            console.log(a);
            var jg=a*td1[1].innerText;
            console.log(jg);
            var td3=td1[3].innerText
            console.log(td3.innerText);
            td1[3].innerText=jg;
            sum();
        }
        function decrease(btn){
            var inputs = btn.parentNode.getElementsByTagName("input");
            var amout=inputs[1].value;
            if(amout==1){
                return;
            }
            amout.value=--amout;
            var tr=btn.parentNode.parentNode;
            var tds=tr.getElementsByTagName("td");
            var price=tds[1].innerHTML;
            tds[3].innerHTML=price*amout;
            sum();
        }



        //计算价格

        function sum(){
            console.log("sum");
            var tbody=document.getElementById("goods");
            var trs=tbody.getElementsByTagName("tr");
            var s=0;
            for (var i = 0; i < trs.length; i++) {
                var td=trs[i].getElementsByTagName("td")[3];
                console.log(td);
                s+=parseInt(td.innerHTML);
                console.log(s);
            }
            var sunt=document.getElementById("total");
            sunt.innerText=s;
        }
    </script>
  </head>
  <body>
    <h1>真划算</h1>
    <table>
      <tr>
        <th>商品</th>
        <th>单价(元)</th>
        <th>颜色</th>
        <th>库存</th>
        <th>好评率</th>
        <th>操作</th>
      </tr>   
      <tr>
        <td>罗技M185鼠标</td>
        <td>80</td>
        <td>黑色</td>
        <td>893</td>
        <td>98%</td>
        <td align="center">
          <input type="button" value="加入购物车" onclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>微软X470键盘</td>
        <td>150</td>
        <td>黑色</td>
        <td>9028</td>
        <td>96%</td>
        <td align="center">
          <input type="button" value="加入购物车" onclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>洛克iphone6手机壳</td>
        <td>60</td>
        <td>透明</td>
        <td>672</td>
        <td>99%</td>
        <td align="center">
          <input type="button" value="加入购物车" onclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>蓝牙耳机</td>
        <td>100</td>
        <td>蓝色</td>
        <td>8937</td>
        <td>95%</td>
        <td align="center">
          <input type="button" value="加入购物车" onclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>金士顿U盘</td>
        <td>70</td>
        <td>红色</td>
        <td>482</td>
        <td>100%</td>
        <td align="center">
          <input type="button" value="加入购物车" onclick="add_shoppingcart(this);"/>
        </td>
      </tr>
    </table>

    <h1>购物车</h1>
    <table>
      <thead>
        <tr>
          <th>商品</th>
          <th>单价(元)</th>
          <th>数量</th>
          <th>金额(元)</th>
          <th>删除</th>
        </tr>
      </thead>
      <tbody id="goods">
        <!-- <tr>
          <td>罗技M185鼠标</td>
          <td>80</td>
          <td align="center">
            <input type="button" value="-"/>
            <input type="text" size="3" readonly value="1"/>
            <input type="button" value="+"/>
          </td>
          <td>80</td>
          <td align="center"><input type="button" value="x"/></td>
        </tr> -->
      </tbody>
      <tfoot>
        <tr>
          <td colspan="3" align="right">总计</td>
          <td id="total"></td>
          <td></td>
        </tr>
      </tfoot>
    </table>    
  </body>
</html>
相关文章
|
人工智能 监控 供应链
AI技术创业有哪些机会?
本文探讨了AI技术创业的多个机会,包括提供行业解决方案、开发智能产品和服务以及教育和培训,为创业者在医疗保健、金融服务、零售、教育等多个领域提供了丰富的机遇。
596 2
|
存储 数据安全/隐私保护
音乐宿主软件有哪些?哪个最好用?FL Studio/Cubase/Studio one
现如今市面上的音乐宿主软件有很多,同时每个音乐宿主软件都有其优缺点,选择哪款音乐宿主软件,就成了新入门小伙伴面临的一个难题,所以今天和大家分享一下,音乐宿主软件对比,音乐宿主软件需要什么配置。
6613 0
|
移动开发 前端开发 JavaScript
11款惊艳的HTML5粒子动画特效
11款惊艳的HTML5粒子动画特效
1910 0
11款惊艳的HTML5粒子动画特效
|
算法 Shell 测试技术
Monkey 常用命令详解含高级参数应用
Monkey 常用命令详解含高级参数应用
Monkey 常用命令详解含高级参数应用
|
编译器 C++ 开发者
C++一分钟之-C++20新特性:模块化编程
【6月更文挑战第27天】C++20引入模块化编程,缓解`#include`带来的编译时间长和头文件管理难题。模块由接口(`.cppm`)和实现(`.cpp`)组成,使用`import`导入。常见问题包括兼容性、设计不当、暴露私有细节和编译器支持。避免这些问题需分阶段迁移、合理设计、明确接口和关注编译器更新。示例展示了模块定义和使用,提升代码组织和维护性。随着编译器支持加强,模块化将成为C++标准的关键特性。
1023 3
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的农产品商城管理系统
基于Java+Springboot+Vue开发的农产品商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。 通过学习基于Java的农产品商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
360 5
基于Java+Springboot+Vue开发的农产品商城管理系统
|
存储 安全 数据管理
Docker中实现数据持久化
【10月更文挑战第8天】
412 1
|
JSON 自然语言处理 API
对接开源大模型应用开发平台最佳实践
本文介绍如何使用OpenSearch LLM智能问答版对接大模型应用开发平台构建RAG系统。
751 8
对接开源大模型应用开发平台最佳实践
|
11月前
|
机器学习/深度学习 存储 人工智能
【AI系统】低比特量化原理
模型量化是将浮点数模型参数转化为低比特整数表示的技术,旨在减少模型大小、内存消耗及推理延迟,但会带来精度损失。本文介绍量化的基本原理、优势及挑战,涵盖量化训练、动态与静态离线量化等方法,并探讨线性与非线性量化、饱和与非饱和量化等技术细节。
487 2
【AI系统】低比特量化原理
|
11月前
|
机器学习/深度学习 人工智能 安全
并非只有AI-2025年工作技能报告
全球最大的在线学习平台Coursera发布《2025年工作技能报告》,报告基于500万企业学习者和7,000多家机构的数据分析,揭示了2025年全球劳动力所需的关键技能趋势。报告强调,随着GenAI的快速发展,相关技能的课程注册量同比增长了866%,显示出对AI能力的需求激增。
774 9