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

  • 实现效果

  • 源码
  1. <!DOCTYPE HTML>
  2.  
  3. <html lang="en-US">
  4.  
  5. <head>
  6.  
  7. <meta charset="UTF-8">
  8.  
  9. <title>商品SKU选择DEMO3</title>
  10.  
  11. </head>
  12.  
  13. <body>
  14.  
  15. <style type="text/css">
  16.  
  17. ul,li{ padding:0px; margin:0px;}
  18.  
  19. #panel{ width:500px; margin:30px auto;}
  20.  
  21. .goods_attr{ overflow:hidden;}
  22.  
  23. .goods_attr .label {font: 12px/30px '宋体';color: #777;width: 50px;;padding-right: 10px;float: left; display:block;}
  24.  
  25. .goods_attr ul {float:left;width:300px;}
  26.  
  27. .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}
  28.  
  29. .goods_attr li.b{border:1px dotted #CCC;color:#DDD; pointer:none;}
  30.  
  31. .goods_attr li.b img {opacity:0.4;}
  32.  
  33. .goods_attr li.sel{ border:1px solid #c80a28;color:#333;}
  34.  
  35. .goods_attr li.text{margin:5px 10px 5px 0; height:23px;line-height:23px;text-indent:0;padding:0 23px;font-style:normal;}
  36.  
  37. .goods_attr li.img{ margin-right:10px;width:35px;height:35px; line-height:35px;text-align:center;}
  38.  
  39. </style>
  40.  
  41. <div id="panel">
  42.  
  43. <div id="panel_sku_list"><pre></pre></div>
  44.  
  45. <div id="panel_sel">
  46.  
  47. </div>
  48.  
  49. </div>
  50.  
  51. <script src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js"></script>
  52. <script>
  53. var keys = {
  54.  
  55. 'attr1':['10','11','12'],
  56.  
  57. 'attr2':['20','21','22','23'],
  58.  
  59. 'attr3':['30','31','32'],
  60.  
  61. 'attr4':['40','41']
  62.  
  63. };
  64.  
  65. //SKU,Stock Keeping Uint(库存量单位)
  66.  
  67. var sku_list=[
  68.  
  69. {'attrs':'10|20|30|40','num':120},
  70. {'attrs':'10|21|30|40','num':10},
  71. {'attrs':'10|22|30|40','num':28},
  72. {'attrs':'10|22|31|41','num':220},
  73. {'attrs':'10|22|32|40','num':130},
  74. {'attrs':'11|23|32|41','num':120},
  75. {'attrs':'11|22|32|41','num':120},
  76. {'attrs':'11|22|31|41','num':120},
  77. {'attrs':'11|22|31|40','num':120},
  78. {'attrs':'12|22|31|40','num':120},
  79. ];
  80.  
  81. //显示html结构
  82.  
  83. function show_attr_item(){
  84.  
  85. var html='';
  86.  
  87. //k是下标,跟php不同
  88. for(k in keys){
  89.  
  90. html+='<div class="goods_attr" > <span class="label">'+k+'</span>';
  91.  
  92. html+='<ul>'
  93.  
  94. for(k2 in keys[k]){
  95.  
  96. _attr_id=keys[k][k2];
  97.  
  98. html+='<li class="text" val="'+_attr_id+'" >';
  99.  
  100. html+='<span>'+_attr_id+'</span>';
  101.  
  102. html+='<s></s>';
  103.  
  104. html+='</li>'
  105.  
  106. }
  107.  
  108. html+='</ul>';
  109.  
  110. html+='</div>';
  111.  
  112. }
  113.  
  114. $('#panel_sel').html(html);
  115.  
  116. }
  117.  
  118. //显示数据
  119.  
  120. function show_data(sku_list){
  121.  
  122. var str="";
  123.  
  124. for( k in sku_list){
  125.  
  126. str+=sku_list[k]['attrs']+"\t"+sku_list[k]['num']+"\n";
  127.  
  128. }
  129.  
  130. $('#panel_sku_list pre').html(str);
  131.  
  132. }
  133.  
  134. show_data(sku_list);
  135.  
  136. show_attr_item();
  137. //返回对象中的一个数组,有attr属性
  138. function filterProduct(ids){
  139.  
  140. var result=[];
  141.  
  142. $(sku_list).each(function(k,v){
  143.  
  144. _attr='|'+v['attrs']+'|';
  145.  
  146. _all_ids_in=true;
  147.  
  148. for( k in ids){
  149.  
  150. if(_attr.indexOf('|'+ids[k]+'|')==-1){
  151.  
  152. _all_ids_in=false;
  153.  
  154. break;
  155.  
  156. }
  157.  
  158. }
  159.  
  160. //把数组中的id所在那行的所有元素都压入result。最后返回
  161. if(_all_ids_in){
  162.  
  163. result.push(v);
  164.  
  165. }
  166.  
  167. });
  168.  
  169. return result;
  170.  
  171. }
  172.  
  173. function filterAttrs(ids){
  174.  
  175. var products=filterProduct(ids);
  176.  
  177. //console.log(products);
  178.  
  179. var result=[];
  180.  
  181. $(products).each(function(k,v){
  182.  
  183. //括号内的还是返回一个数组,concat函数是拼接一个或多个函数。
  184. result=result.concat(v['attrs'].split('|'));
  185.  
  186. });
  187.  
  188. return result;
  189.  
  190. }
  191.  
  192. //已选择的节点数组
  193.  
  194. function _getSelAttrId(){
  195.  
  196. var list=[];
  197.  
  198. $('.goods_attr li.sel').each(function(){
  199.  
  200. list.push($(this).attr('val'));
  201.  
  202. });
  203.  
  204. return list;
  205.  
  206. }
  207. //注册点击事件
  208. $('.goods_attr li').click(function(){
  209. if($(this).hasClass('b')){
  210. return ;//被锁定了
  211. }
  212. if($(this).hasClass('sel')){
  213. $(this).removeClass('sel');
  214. }else{
  215. $(this).siblings().removeClass('sel');
  216. $(this).addClass('sel');
  217. }
  218. var select_ids=_getSelAttrId();
  219. // console.log(select_ids);
  220. ////已经选择了的规格
  221. var ids=filterAttrs(select_ids);
  222. //如果id不在已选id所在行组成的数组中,则然他禁止点击
  223. $('#panel_sel').find('li').each(function(k2,li2){
  224. if($.inArray($(li2).attr('val'),ids)==-1){
  225. $(li2).addClass('b');
  226. }else{
  227. $(li2).removeClass('b');
  228. }
  229. });
  230. });
  231. </script>
  232. </body>
  233. </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. mvc 学习笔记

    1.routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); MVC中的路由忽略,只要访问的地址中带有 .axd , 该请求都将排除在mv ...

  2. 创建指定python版本的虚拟环境

    使用virtualenvwrapper管理虚拟环境 鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper. virtualenvwrapper提供了一系 ...

  3. DOM属性

    节点属性: 文档里的每个节点都有以下属性. nodeName nodeName属性将返回一个字符串,其内容是给定节点的名字: name = node.nodeName 如果给定节点是一个属性节点,no ...

  4. MySQL统计各个表中的记录数

    通过下面的SQL语句可以统计出数据库的各个表中的记录数: select table_schema, table_name,table_rows from information_schema.tabl ...

  5. RocketMQ 多副本前置篇:初探raft协议

    目录 1.Leader选举 1.1 一轮投票中,只有一个节点发起投票的情况 1.2 一轮投票中,超过一个节点发起投票的情况 1.3 思考如何实现Raft选主 2.日志复制 Raft协议是分布式领域解决 ...

  6. Leetcode_01【两数之和】

    文章目录:  题目 脚本一及注释 脚本逻辑 脚本二及注释 脚本逻辑 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. ...

  7. Chapter 07-Basic statistics(Part2 Frequency and contingency tables)

    这一部分使用在vcd包中的Arthritis数据集. > library(vcd) 载入需要的程辑包:MASS 载入需要的程辑包:grid 载入需要的程辑包:colorspace > he ...

  8. react中简单倒计时跳转

    其实在react中实现倒计时的跳转方法有很多中,其中我认为较为好用的就是通过定时器更改state中的时间值. 首先在constructor中设置10秒的时间值: constructor () { su ...

  9. c# 窗体开发1 基本控件的使用

      namespace firstly #当前命名空间控件 { public partial class Form1 : Form { public Form1() #第一个窗体 { Initiali ...

  10. pyecharts实现星巴克门店分布可视化分析

    项目介绍 使用pyecharts对星巴克门店分布进行可视化分析: 全球门店分布/拥有星巴克门店最多的10个国家或地区: 拥有星巴克门店最多的10个城市: 门店所有权占比: 中国地区门店分布热点图. 数 ...