原生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 31 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
jquery实现图片滚动效果的简单实例
Nov 23 Javascript
用js设置下拉框为只读的小技巧
Apr 10 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
JavaScript性能优化之小知识总结
Nov 20 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
Dec 18 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
vue.js获得当前元素的文字信息方法
Mar 09 Javascript
详解Vue中CSS样式穿透问题
Sep 12 Javascript
实例讲解React 组件
Jul 07 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 高手之路(一)
2006/10/09 PHP
缓存技术详谈―php
2006/12/14 PHP
php下的权限算法的实现
2007/04/28 PHP
php join函数应用
2011/05/04 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
超级退弹代码
2008/07/07 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python for循环中的陷阱详解
2018/07/13 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
HTTP状态码详解
2021/03/18 杂记
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
经济国贸专业求职信
2014/06/18 职场文书
费城故事观后感
2015/06/10 职场文书
股东出资协议书
2016/03/21 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle