原生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获取FCK编辑器信息的具体方法
Jul 12 Javascript
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 Javascript
浅谈JavaScript字符集
May 22 Javascript
js实现上传图片预览的方法
Feb 09 Javascript
JavaScript中String.prototype用法实例
May 20 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
jQuery手动点击实现图片轮播特效
Apr 20 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
jquery与js实现全选功能的区别
Jun 11 jQuery
vue.js全局API之nextTick全面解析
Jul 07 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
Feb 11 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
PHP 5.0对象模型深度探索之对象复制
2008/03/27 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
PHP最常用的正则表达式
2017/02/13 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
python实现txt文件格式转换为arff格式
2018/05/31 Python
python excel转换csv代码实例
2019/08/26 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
党校培训思想汇报
2014/01/03 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
辩论赛主持词
2014/03/18 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
奖励通知
2015/04/22 职场文书
关于做家务的心得体会
2016/01/23 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技