原生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 相关文章推荐
IE与FireFox中的childNodes区别
Oct 20 Javascript
jquery 插件学习(五)
Aug 06 Javascript
node.js中的fs.truncate方法使用说明
Dec 15 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
Apr 03 Javascript
Javascript 获取鼠标当前的位置实现方法
Oct 27 Javascript
基于javascript实现按圆形排列DIV元素(三)
Dec 02 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
JS完成画圆圈的小球
Mar 07 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
vue实现在v-html的html字符串中绑定事件
Oct 28 Javascript
javascript实现倒计时效果
Feb 17 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实现的功能是显示8条基色色带
2006/10/09 PHP
PHP小技巧之函数重载
2014/06/02 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
JS扩展方法实例分析
2015/04/15 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
python之wxPython菜单使用详解
2014/09/28 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
在pycharm中实现删除bookmark
2020/02/14 Python
老教师工作总结的自我评价
2013/09/27 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
pandas数值排序的实现实例
2021/07/25 Python
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server