jquery实现商品sku多属性选择(商品详情页)
转载于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多属性选择(商品详情页)的更多相关文章
- Eclipse中Tomcat v8.0 Server at localhost右键选择Properties详情页中Server Locations变灰无法编辑
Eclipse中Tomcat v8.0 Server at localhost右键选择Properties详情页中Server Locations变灰无法编辑解决办法:1.首先将Servers中部署的 ...
- B2C电子商务系统研发——商品SKU分析和设计(一)
一.SKU及相关概念定义 在设计商品SKU之前,首先让我们熟悉一下SKU和相关的一些概念. # 什么是SKU: SKU=Stock Keeping Unit(库存量单位) 同一型号的商品,或者说是同一 ...
- 商品模型:SPU、商品、SKU概念模型设计
商品系统是电商SaaS.新零售SaaS最基础.最核心的系统之一.商品系统几乎需要支撑所有业务系统,商品详情.购物车.订单.履约.结算.售后.库存.供应链等,都需要依赖商品系统的能力.为了保障业务的稳定 ...
- jquery特效 商品SKU属性规格选择实时联动
转载,原文链接 功能:各种属性的值选中后,SKU填写表格进行变动,对属性.属性值的数量自适应,编辑时不因去掉勾选导致原有值不显示 所有代码均属原创,现在共享,如果有更好的实现方式,希望互相交流 最终实 ...
- 前端实现商品sku属性选择
一.效果图 二.后台返回的数据格式 [{ "saleName": "颜色", "dim": 1, "saleAttrList&qu ...
- 商品sku规格选择效果,没有商品的不能选中,选择顺序不影响展示结果
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- Vue实现仿淘宝商品详情属性选择的功能
Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下: attrA ...
- 电商ERP系统——商品SKU与库存设计
面试题经常问道,如何设计库存,哪些库存呢?分类属性的库存:不同颜色 不同尺码的属性的库存,这时候需要针对具体的SKU商品创建表. 总体思路 1.商品关联商品类别,商品类别关联多个商品属性,其中指定某几 ...
- 工具类:每次随机生成有销售库存有实际库存的1个店铺商品和对应的2个店铺商品sku
# coding:utf-8 # @fileName :2.每次随机生成有销售库存有实际库存的1个店铺商品和对应的2个店铺商品sku.py # @createTime :2020/4/4 10:33 ...
随机推荐
- mvc 学习笔记
1.routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); MVC中的路由忽略,只要访问的地址中带有 .axd , 该请求都将排除在mv ...
- 创建指定python版本的虚拟环境
使用virtualenvwrapper管理虚拟环境 鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper. virtualenvwrapper提供了一系 ...
- DOM属性
节点属性: 文档里的每个节点都有以下属性. nodeName nodeName属性将返回一个字符串,其内容是给定节点的名字: name = node.nodeName 如果给定节点是一个属性节点,no ...
- MySQL统计各个表中的记录数
通过下面的SQL语句可以统计出数据库的各个表中的记录数: select table_schema, table_name,table_rows from information_schema.tabl ...
- RocketMQ 多副本前置篇:初探raft协议
目录 1.Leader选举 1.1 一轮投票中,只有一个节点发起投票的情况 1.2 一轮投票中,超过一个节点发起投票的情况 1.3 思考如何实现Raft选主 2.日志复制 Raft协议是分布式领域解决 ...
- Leetcode_01【两数之和】
文章目录: 题目 脚本一及注释 脚本逻辑 脚本二及注释 脚本逻辑 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. ...
- Chapter 07-Basic statistics(Part2 Frequency and contingency tables)
这一部分使用在vcd包中的Arthritis数据集. > library(vcd) 载入需要的程辑包:MASS 载入需要的程辑包:grid 载入需要的程辑包:colorspace > he ...
- react中简单倒计时跳转
其实在react中实现倒计时的跳转方法有很多中,其中我认为较为好用的就是通过定时器更改state中的时间值. 首先在constructor中设置10秒的时间值: constructor () { su ...
- c# 窗体开发1 基本控件的使用
namespace firstly #当前命名空间控件 { public partial class Form1 : Form { public Form1() #第一个窗体 { Initiali ...
- pyecharts实现星巴克门店分布可视化分析
项目介绍 使用pyecharts对星巴克门店分布进行可视化分析: 全球门店分布/拥有星巴克门店最多的10个国家或地区: 拥有星巴克门店最多的10个城市: 门店所有权占比: 中国地区门店分布热点图. 数 ...