原生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 相关文章推荐
javascript编程起步(第一课)
Jan 10 Javascript
Javascript 布尔型分析
Dec 22 Javascript
jQuery开发者都需要知道的5个小技巧
Jan 08 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
May 23 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
AngularJS中的指令全面解析(必看)
May 20 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
Feb 28 Javascript
详解Angular5 路由传参的3种方法
Apr 28 Javascript
React.js绑定this的5种方法(小结)
Jun 05 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
Jun 24 Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 Javascript
JS异步宏队列微队列原理详解
Sep 09 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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
javascript每日必学之循环
2016/02/19 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
Node.js中的cluster模块深入解读
2018/06/11 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
Python异常处理操作实例详解
2018/08/28 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
数学专业推荐信范文
2013/11/21 职场文书
学校食堂采购员岗位职责
2013/12/05 职场文书
学前教育学生自荐信范文
2013/12/31 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
Python的property属性详细讲解
2022/04/11 Python