转载于https://blog.csdn.net/csdn924618338/article/details/51455595

  • 实现效果

  • 源码
<!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语法解释

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

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

  • 一些函数说明

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

jquery实现商品sku多属性选择(商品详情页)的更多相关文章

  1. Eclipse中Tomcat v8.0 Server at localhost右键选择Properties详情页中Server Locations变灰无法编辑

    Eclipse中Tomcat v8.0 Server at localhost右键选择Properties详情页中Server Locations变灰无法编辑解决办法:1.首先将Servers中部署的 ...

  2. B2C电子商务系统研发——商品SKU分析和设计(一)

    一.SKU及相关概念定义 在设计商品SKU之前,首先让我们熟悉一下SKU和相关的一些概念. # 什么是SKU: SKU=Stock Keeping Unit(库存量单位) 同一型号的商品,或者说是同一 ...

  3. 商品模型:SPU、商品、SKU概念模型设计

    商品系统是电商SaaS.新零售SaaS最基础.最核心的系统之一.商品系统几乎需要支撑所有业务系统,商品详情.购物车.订单.履约.结算.售后.库存.供应链等,都需要依赖商品系统的能力.为了保障业务的稳定 ...

  4. jquery特效 商品SKU属性规格选择实时联动

    转载,原文链接 功能:各种属性的值选中后,SKU填写表格进行变动,对属性.属性值的数量自适应,编辑时不因去掉勾选导致原有值不显示 所有代码均属原创,现在共享,如果有更好的实现方式,希望互相交流 最终实 ...

  5. 前端实现商品sku属性选择

    一.效果图 二.后台返回的数据格式 [{ "saleName": "颜色", "dim": 1, "saleAttrList&qu ...

  6. 商品sku规格选择效果,没有商品的不能选中,选择顺序不影响展示结果

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  7. Vue实现仿淘宝商品详情属性选择的功能

    Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下:   attrA ...

  8. 电商ERP系统——商品SKU与库存设计

    面试题经常问道,如何设计库存,哪些库存呢?分类属性的库存:不同颜色 不同尺码的属性的库存,这时候需要针对具体的SKU商品创建表. 总体思路 1.商品关联商品类别,商品类别关联多个商品属性,其中指定某几 ...

  9. 工具类:每次随机生成有销售库存有实际库存的1个店铺商品和对应的2个店铺商品sku

    # coding:utf-8 # @fileName :2.每次随机生成有销售库存有实际库存的1个店铺商品和对应的2个店铺商品sku.py # @createTime :2020/4/4 10:33 ...

随机推荐

  1. applicationContext-dao.xml 配置错误

    https://www.captainbed.net/ 配置文件报错: 不允许有匹配 "[xX][mM][lL]" 的处理指令目标. 错误原因: 由于大部分都是搬砖,所以格式没注意 ...

  2. python分支循环

    1.遍历循环 for i in range(5) for i in range (M,N,K) for c in s: for c in 'python' print(c,end="&quo ...

  3. 【搞定面试官】谈谈你对JDK中Executor的理解?

    ## 前言 随着当今处理器计算能力愈发强大,可用的核心数量越来越多,各个应用对其实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行.在此背景下,Java自JDK1.5 提供了自己的多线程框架 ...

  4. 解密面试中的套路,你都get到了么?

    如果大家有关注一些测试类的公众号或者论坛的话,肯定会发现很多文章都在表示现在行业的寒冬冷潮来了!然后有很多测试行业从业者,或者转行测试行业者都表示:工作好难找,公司跑了千千万,依然拿不到一个offer ...

  5. PythonI/O进阶学习笔记_7.python动态属性,__new__和__init__和元类编程(上)

    content: 上: 1.property动态属性 2.__getattr__和__setattr__的区别和在属性查找中的作用 3.属性描述符 和属性查找过程 4.__new__和__init__ ...

  6. python的匿名函数

    在Python,有两种函数,一种是def定义,一种是lambda函数. lambda函数是Python一种生成函数对象的表达式形式.匿名函数通常是创建了可以被调用的函数,它返回了函数,而并没有将这个函 ...

  7. 【新手向】如何学习Java集合

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 如果认识我的同学可能就知道,我已经写过很多系列级 ...

  8. 程序员的算法课(14)-Hash算法-对海量url判重

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...

  9. 磁盘格式化、磁盘挂载、手动增加swap空间 使用介绍

    第4周第2次课(4月10日) 课程内容: 4.5/4.6 磁盘格式化4.7/4.8 磁盘挂载4.9 手动增加swap空间 4.5/4.6 磁盘格式化 [root@jimmylinux-002 ~]# ...

  10. PHP和JavaScript中奖概率算法

    这是一个经典的概率算法. 现在有数组:[10, 20, 30, 40] . 假设对应中奖几率:特等奖10%,一等奖20%,二等奖30%,三等奖40%,总共100%. 算法开始时,从数组中选出一个值$v ...