原生js+cookie实现购物车功能的方法分析


Posted in Javascript onDecember 21, 2017

本文实例讲述了原生js+cookie实现购物车功能的方法。分享给大家供大家参考,具体如下:

这里使用js+cookie实现简单的购物车功能。

首先是简单的HTML结构,只是为了演示下功能。

<ul>
  <li><span>a0001</span><span>shdfi</span><span>¥98.00</span>
<input type="button" value="加入购物车"></li>
  <li><span>a0002</span><span>fbvfgdb</span><span>¥698.00</span>
<input type="button" value="加入购物车"></li>
  <li><span>a0003</span><span>dfdfi</span><span>¥988.00</span>
<input type="button" value="加入购物车"></li>
  <li><span>a0004</span><span>sssi</span><span>¥998.00</span>
<input type="button" value="加入购物车"></li>
  <li><span>a0005</span><span>yyu</span><span>¥98.00</span>
<input type="button" value="加入购物车"></li>
  <li><span>a0006</span><span>sheri</span><span>¥598.00</span>
<input type="button" value="加入购物车"></li>
  <li><span>a0007</span><span>dsfcdhdfi</span><span>¥498.00</span>
<input type="button" value="加入购物车"></li>
  <li><span>sbnm,</span><span>¥698.00</span><input type="button" value="加
入购物车"></li>
</ul>
<a href="购物车查看页面.html" rel="external nofollow" >查看购物车</a>

下面的代码是实现点击添加按钮时,把商品信息加入cookie,注释比较详细,在代码中我把操作cookie(set和get封装为cookieUtil对象的方法,方便调用)。

<script>
    //JSON.parse
    //JSON.stringify
    onload = function () {
      var input = document.getElementsByTagName("input");
      //判断是否存在cookie,或是第一次添加
      var arr = cookieUtil.getCookie("car") ? 
JSON.parse(cookieUtil.getCookie("car")) : [];
      //遍历给每个input元素添加点击事件
      for (var j = 0; j < input.length; j++) {
        input[j].onclick = function () {
          var g_id = this.parentNode.children[0].innerHTML;
          var g_name = this.parentNode.children[1].innerHTML;
          var g_price = this.parentNode.children[2].innerHTML;
          //遍历cookie,判断是否已经存在该商品
          for (var i = 0; i < arr.length; i++) {
            if (arr[i].g_id == g_id) {
              //已经存在该商品,商品数量+1
              arr[i].num++;
              break;//立即结束遍历
            }
          }
          //如果i的值与arr长度相同,则证明遍历结束也没有进入过if条件语句,
          //cookie中不存在该商品,新建一个商品对象,并添加到数组中
          if (i == arr.length) {
            var goods = {
              "g_id" : g_id,
              "g_name" : g_name,
              "g_price" : g_price,
              num : 1
            }
            arr.push(goods);
          }
          //把更新后的数组序列化为JSON字符串,保存到cookie中
          var date = new Date();
          date.setDate(date.getDate() + 10); //保存十天
  //保存cookie
  cookieUtil.setCookie("car", JSON.stringify(arr), date); 
        }
      }
    }
</script>

这里是封装的cookieUtil对象

//cookie Util
var cookieUtil = {
  //添加cookie
  setCookie: function (name, value, expires) {
    var cookieText = encodeURIComponent(name) + "=" + 
encodeURIComponent(value);
    if (expires && expires instanceof Date) {
      cookieText += "; expires=" + expires;
    }
    // if (domain) {
    //   cookieText += "; domain=" + domain;
    // }
    document.cookie = cookieText;
  },
  //获取cookie
  getCookie: function (name) {
    var cookieText = decodeURIComponent(document.cookie);
    var cookieArr = cookieText.split("; ");
    for (var i = 0; i < cookieArr.length; i++) {
      var arr = cookieArr[i].split("=");
      if (arr[0] == name) {
        return arr[1];
      }
    }
    return null;
  },
  //删除cookie
  unsetCookie: function (name) {
    document.cookie = encodeURIComponent(name) + "=; expires=" + 
new Date(0);
  }
};

上面的代码都非常好理解,下面这个页面就是把cookie中的商品信息取出来。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>查看购物车页面</title>
  <script src="../Utils.js"></script>
  <script>
    onload = function () {
      var ul = document.getElementsByTagName("ul")[0];
      var arr = cookieUtil.getCookie("car");
      if (arr) {
        arr = JSON.parse(arr);
        //存在cookie则取出来显示到页面上
        for (var i = 0; i < arr.length; i++) {
          //每个数组元素对应的是一个商品对象
          var goods = arr[i];
          var li = document.createElement("li");
          li.innerHTML = "商品名称:" + goods.g_name + ",商品数
量" + goods.num + ",商品单价:" + goods.g_price;
          ul.appendChild(li);
        }
      } else {
        alert("购物车中还不存在商品!");
      }
    }
  </script>
</head>
<body>
<ul></ul>
</body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js constructor的实际作用分析
Nov 15 Javascript
JavaScript使用循环和分割来替换和删除元素实例
Oct 13 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
Mar 04 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 Javascript
简介JavaScript中Math.LOG10E属性的使用
Jun 14 Javascript
jQuery模拟下拉框选择对应菜单的内容
Mar 07 Javascript
BootStrap daterangepicker 双日历控件
Jun 02 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 12 Javascript
js定时器出现第一次延迟的原因及解决方法
Jan 04 Javascript
JS实现去除数组中重复json的方法示例
Dec 21 #Javascript
解析vue中的$mount
Dec 21 #Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 #Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
Dec 21 #Javascript
利用node实现一个批量重命名文件的函数
Dec 21 #Javascript
详解webpack3编译兼容IE8的正确姿势
Dec 21 #Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 #Javascript
You might like
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
经验几则 推荐
2006/09/05 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python简单猜数游戏实例
2015/07/09 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
Python中过滤字符串列表的方法
2020/12/22 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
超市业务员岗位职责
2013/12/05 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
中青班党性分析材料
2014/02/16 职场文书
企业后勤岗位职责
2014/02/28 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书