原生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 相关文章推荐
ajax的hide隐藏问题解决方法
Dec 11 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
js实现按Ctrl+Enter发送效果
Sep 18 Javascript
JavaScript中的ArrayBuffer详细介绍
Dec 08 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
JS实现移动端实时监听输入框变化的实例代码
Apr 12 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
Nov 07 Javascript
vue地区选择组件教程详解
May 04 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
Jul 10 Javascript
脚手架vue-cli工程webpack的基本用法详解
Sep 29 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内存管理之谁动了我的内存
2013/06/20 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
jQuery中last()方法用法实例
2015/01/06 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python按行读取文件的简单实现方法
2016/06/22 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
机器学习10大经典算法详解
2017/12/07 Python
python保存文件方法小结
2018/07/27 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
python实现ID3决策树算法
2018/08/29 Python
python实现石头剪刀布程序
2021/01/20 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
公务员群众路线心得体会
2014/11/03 职场文书
2014年教学工作总结
2014/11/13 职场文书
兵马俑导游词
2015/02/02 职场文书
推销搭讪开场白
2015/05/28 职场文书
院系推荐意见
2015/06/05 职场文书
货款欠条范本
2015/07/03 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
数据设计之权限的实现
2022/08/05 MySQL