jquery实现商品sku多属性选择功能(商品详情页)


Posted in jQuery onDecember 20, 2019

SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。

SKU是用来定价和管理库存的,比如一个产品有很多颜色,很多配置,每个颜色和配置的组合都会形成新的产品,这时就产生很多SKU,sku在传统线下行业也是一个非常常用的概念,尤其是服装行业,同款不同尺码不同色都是独立的SKU,需要有独立的条形码,独立的库存管理等。

实现效果

jquery实现商品sku多属性选择功能(商品详情页)

源码

<!DOCTYPE HTML>
<html lang="en-US">
<head>
 <meta charset="UTF-8">
 <title>商品SKU选择DEMO3</title>
</head>
<body>
<style type="text/css">
 ul,li{ padding:0px; margin:0px;}
 #panel{ width:500px; margin:30px auto;}
 .goods_attr{ overflow:hidden;}
 .goods_attr .label {font: 12px/30px '宋体';color: #777;width: 50px;;padding-right: 10px;float: left; display:block;}
 .goods_attr ul {float:left;width:300px;}
 .goods_attr li{color:#333;overflow:hidden;position:relative;float:left;text-align:center; vertical-align:middle; border:1px solid #999;text-indent:0; cursor:pointer}
 .goods_attr li.b{border:1px dotted #CCC;color:#DDD; pointer:none;}
 .goods_attr li.b img {opacity:0.4;}
 .goods_attr li.sel{ border:1px solid #c80a28;color:#333;}
 .goods_attr li.text{margin:5px 10px 5px 0; height:23px;line-height:23px;text-indent:0;padding:0 23px;font-style:normal;}
 .goods_attr li.img{ margin-right:10px;width:35px;height:35px; line-height:35px;text-align:center;}
</style>
<div id="panel">
 <div id="panel_sku_list"><pre></pre></div>
 <div id="panel_sel">
 </div>
</div>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js"></script>
<script>
 var keys = {
 'attr1':['10','11','12'],
 'attr2':['20','21','22','23'],
 'attr3':['30','31','32'],
 'attr4':['40','41']
 };
 //SKU,Stock Keeping Uint(库存量单位)
 var sku_list=[
 {'attrs':'10|20|30|40','num':120},
 {'attrs':'10|21|30|40','num':10},
 {'attrs':'10|22|30|40','num':28},
 {'attrs':'10|22|31|41','num':220},
 {'attrs':'10|22|32|40','num':130},
 {'attrs':'11|23|32|41','num':120},
 {'attrs':'11|22|32|41','num':120},
 {'attrs':'11|22|31|41','num':120},
 {'attrs':'11|22|31|40','num':120},
 {'attrs':'12|22|31|40','num':120},
 ];
 //显示html结构
 function show_attr_item(){
 var html='';
//k是下标,跟php不同
 for(k in keys){
  html+='<div class="goods_attr" > <span class="label">'+k+'</span>';
  html+='<ul>'
  for(k2 in keys[k]){
  _attr_id=keys[k][k2];
  html+='<li class="text" val="'+_attr_id+'" >';
  html+='<span>'+_attr_id+'</span>';
  html+='<s></s>';
  html+='</li>'
  }
  html+='</ul>';
  html+='</div>';
 }
 $('#panel_sel').html(html);
 }
 //显示数据
 function show_data(sku_list){
 var str="";
 for( k in sku_list){
  str+=sku_list[k]['attrs']+"\t"+sku_list[k]['num']+"\n";
 }
 $('#panel_sku_list pre').html(str);
 }
 show_data(sku_list);
 show_attr_item();
 //返回对象中的一个数组,有attr属性
 function filterProduct(ids){
 var result=[];
 $(sku_list).each(function(k,v){
  _attr='|'+v['attrs']+'|';
  _all_ids_in=true;
  for( k in ids){
  if(_attr.indexOf('|'+ids[k]+'|')==-1){
   _all_ids_in=false;
   break;
  }
  }
  //把数组中的id所在那行的所有元素都压入result。最后返回
  if(_all_ids_in){
  result.push(v);
  }
 });
 return result;
 }
 function filterAttrs(ids){
 var products=filterProduct(ids);
//console.log(products);
 var result=[];
 $(products).each(function(k,v){
  //括号内的还是返回一个数组,concat函数是拼接一个或多个函数。
  result=result.concat(v['attrs'].split('|'));
 });
 return result;
 }
 //已选择的节点数组
 function _getSelAttrId(){
 var list=[];
 $('.goods_attr li.sel').each(function(){
  list.push($(this).attr('val'));
 });
 return list;
 }
 //注册点击事件
 $('.goods_attr li').click(function(){
 if($(this).hasClass('b')){
  return ;//被锁定了
 }
 if($(this).hasClass('sel')){
  $(this).removeClass('sel');
 }else{
  $(this).siblings().removeClass('sel');
  $(this).addClass('sel');
 }
 var select_ids=_getSelAttrId();
// console.log(select_ids);
////已经选择了的规格
 var ids=filterAttrs(select_ids);
//如果id不在已选id所在行组成的数组中,则然他禁止点击
 $('#panel_sel').find('li').each(function(k2,li2){
  if($.inArray($(li2).attr('val'),ids)==-1){
  $(li2).addClass('b');
  }else{
  $(li2).removeClass('b');
  }
 });
 });
</script>
</body>
</html>

部分截图展示说明,一个div放置数据,一个放置效果。模拟后台,结构是根据jquery语法动态展示的。

jquery实现商品sku多属性选择功能(商品详情页)

一些jquery语法解释

key是对应动态展示的效果,可以扩展属性值。sku_list是存在的属性组合。

存在的是指,在这里是有attr1,attr2,attr3,attr4(相当于颜色,尺寸,内存,型号)这4种规格,里面有2x4x3x2=48种组合,而实际上售卖的组合只有9种,就是sku__list列出来的。

jquery实现商品sku多属性选择功能(商品详情页)

一些函数说明

这2个函数是动态展示数据和结构,依据是上面图中的2个数组。keys和sku_list

jquery实现商品sku多属性选择功能(商品详情页)

jquery实现商品sku多属性选择功能(商品详情页)

总结

以上所述是小编给大家介绍的jquery实现商品sku多属性选择功能(商品详情页),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

jQuery 相关文章推荐
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 jQuery
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
jQuery之动画ajax事件(实例讲解)
Jul 18 jQuery
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
Nov 14 jQuery
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
Apr 17 jQuery
jQuery实现的电子时钟效果完整示例
Apr 28 jQuery
使用jQuery动态设置单选框的选中效果
Dec 06 jQuery
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 jQuery
jQuery中实现text()的方法
Apr 04 jQuery
jquery实现穿梭框功能
Jan 19 jQuery
基于jQuery实现可编辑的表格
Dec 11 #jQuery
jQuery实现可编辑的表格
Dec 11 #jQuery
jQuery实现验证用户登录
Dec 10 #jQuery
jquery实现弹窗(系统提示框)效果
Dec 10 #jQuery
jQuery实现消息弹出框效果
Dec 10 #jQuery
jQuery实现弹出层效果
Dec 10 #jQuery
JQuery样式与属性设置方法分析
Dec 07 #jQuery
You might like
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
jquery中radio checked问题
2015/03/16 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
JavaScript字符串对象
2017/01/14 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
jQuery事件详解
2017/02/23 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python妹子图简单爬虫实例
2015/07/07 Python
Python使用wxPython实现计算器
2018/01/30 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
python如何实现word批量转HTML
2020/09/30 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
JMS中Topic和Queue有什么区别
2013/05/15 面试题
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
护理自荐信范文
2013/10/05 职场文书
2014年科协工作总结
2014/12/09 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
禁毒心得体会范文
2016/01/15 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
Nginx进程调度问题详解
2021/09/25 Servers
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript