原生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 Event学习第七章 事件属性
Feb 07 Javascript
基于jquery的修改当前TAB显示标题的代码
Dec 11 Javascript
javascript ready和load事件的区别示例介绍
Aug 30 Javascript
jquery禁止回车触发表单提交
Dec 12 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
May 26 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
Jun 02 Javascript
微信小程序 条件渲染详解
Oct 09 Javascript
JS实现禁止鼠标右键的功能
Oct 15 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
js表单序列化判断空值的实例
Sep 22 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
Apr 15 Javascript
Vue3 Composition API的使用简介
Mar 29 Vue.js
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
thinkphp模板继承实例简述
2014/11/26 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
php上传大文件设置方法
2016/04/14 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
js实现YouKu的漂亮搜索框效果
2015/08/19 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
python登陆asp网站页面的实现代码
2015/01/14 Python
Django更新models数据库结构步骤
2020/04/01 Python
Django websocket原理及功能实现代码
2020/11/14 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
Java编程面试题
2016/04/04 面试题
继承权公证书范本
2015/01/23 职场文书
运动员加油词
2015/07/18 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
Linux中如何安装并部署Redis
2022/04/18 Servers
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang