jquery动态生成SKU表格
sku的概念
SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。单品:对一种商品而言,当其品牌、型号、配置、等级、花色、包装容量、单位、生产日期、保质期、用途、价格、产地等属性中任一属性与其他商品存在不同时,可称为一个单品。--百度百科
之前要做一个自定义sku属性并动态生成SKU表格,然后在网上找了一个类似的
http://www.internetke.com/jsE...
进行学习最后做出的效果如下
- 需要自定义SKU属性,可自定义SKU有两个纬度:例如颜色和规格,如下图所示
- 添加SKU属性后,自动生成SKU表格,需要填写表格中每个SKU对应的库存、图片、价格
实现方法:根据输入的属性值生成数组,此数组为多维数组。对数组进行排列组合,形成新的数组。然后进行表格的生成,之后合并相同列。
var step = { //SKU信息组合 Creat_Table: function () { },//合并行 hebingFunction: function () { }, //组合数组 doExchange: function (doubleArrays,propvalidArr) { } return step; })
获取所有失去焦点的input,形成属性数组
var SKUObj = $(".attribute .Father_Title");//获取所有的属性 var arrayTile = new Array();//存放所有的属性 var arrayInfo = new Array();//存放所有的属性值 var arrayColumn = new Array();//指定列,用来合并哪些列 var propvalidArr = [];//记录SKU值主键 var columnIndex = 0; $.each(SKUObj, function (i, item){ if ($(item).find("input[type='text']").val() != ""){ var itemName = $(item).parent().find(".attrValue"); var order = []; var skuVal = []; $.each(itemName, function (index,value){ if($(value).find("input[type='text']").val() != ""){ order.push($(value).find("input[type='text']").val()); var idx = $(item).attr("propid")+$(value).find("div").attr("propvalid"); skuVal.push($(item).attr("propid")+$(value).find("div").attr("propvalid")) } }); if(order.join()!= ""){ arrayTile.push($(item).find("input[type='text']").val()); arrayInfo.push(order); arrayColumn.push(columnIndex); columnIndex++; propvalidArr.push(skuVal); } } });
2.arrayInfo是一个多为数组,该数组进行排列组合,就是寻找出所有的组合的可能性
1.[ ["白色", "红色"], ] 排列组合成为: [ ["白色"], ["红色"], ]
2.[ ["白色", "红色"], ["200", "300"], ] 排列组合成为: [ ["白色", "200"], ["白色", "300"], ["红色", "200"], ["红色", "300"], ]
实现代码: doExchange: function (doubleArrays,propvalidArr) { var len = doubleArrays.length; if (len >= 2) { var arr1 = doubleArrays[0], propArr1 = propvalidArr[0]; var arr2 = doubleArrays[1], propArr2 = propvalidArr[1]; var len1 = doubleArrays[0].length, propLen1 = propvalidArr.length; var len2 = doubleArrays[1].length, propLen2 = propvalidArr.length; var newlen = len1 * len2, propnewlen = propLen1 * propLen2; var temp = new Array(newlen), proptemp = new Array(propnewlen); var index = 0; for (var i = 0; i < len1; i++) { for (var j = 0; j < len2; j++) { temp[index] = arr1[i] + "," + arr2[j]; proptemp[index] = propArr1[i] + "," + propArr2[j]; index++; } } var newArray = new Array(len - 1); var propnewArray = new Array(len - 1); newArray[0] = temp, propnewArray[0] = proptemp; if (len > 2) { var _count = 1; for (var i = 2; i < len; i++) { newArray[_count] = doubleArrays[i]; propnewArray[_count] = propvalidArr[i]; _count++; } } return step.doExchange(newArray,propnewArray); } else { var propArr = []; propArr.push(doubleArrays[0]); propArr.push(propvalidArr[0]); return propArr; } }