liuxuean 2016-02-17 12:36:11 3225次浏览 2条回复 0 0 0

最近无聊时写看到淘宝后台发布里有个规格组合功能,于是到网上找了段,然后更改加点自己的需求,总感觉非常别扭,代码如下:

<div class="div_content" style="padding: 5px 8px;">
	<div class="div_title">
	<span>宝贝规格:</span>
	</div>
	<div class="div_contentlist">
	<ul class="Father_Title">
	<li>尺码:</li>
	</ul>
	<ul class="Father_Item0">
		<li style="display: inline-block;" class="li_width  in_all">
		 <label class="in_all">
		 <input type="checkbox" t_value="XXS" value="62168" name="goodsAttrId[]" class="chcBox_Width" id_62168="62168" id="Checkbox1">
		  </label>
		  <span class="span_nom_attr_val_test" tid="62168">XXS</span>
		  <span class="li_empty"> </span>
		  </li>
		  <li style="display: inline-block;" class="li_width  in_all">
		 <label class="in_all">
		 <input type="checkbox" t_value="XS" value="62169" name="goodsAttrId[]" class="chcBox_Width" id_62169="62169" id="Checkbox2">
		  </label>
		  <span class="span_nom_attr_val_test" tid="62169">XS</span>
		  <span class="li_empty"> </span>
		  </li>
		  </ul>
		  
		  <ul class="Father_Title">
		   <li>颜色:</li>
		  </ul>
		<ul class="Father_Item1">
		<li style="display: inline-block;" class="li_width  in_all">
		 <label class="in_all">
		 <input type="checkbox" t_value="多色/渐变色" value="62144" name="goodsAttrId[]" class="chcBox_Width" id_62144="62144" id="Checkbox1">
		  </label>
		  <span class="span_nom_attr_val_test" tid="62144">多色/渐变色</span>
		  <span class="li_empty"> </span>
		  </li><li style="display: inline-block;" class="li_width  in_all">
		 <label class="in_all">
		 <input type="checkbox" t_value="白色" value="62145" name="goodsAttrId[]" class="chcBox_Width" id_62145="62145" id="Checkbox2">
		  </label>
		  <span class="span_nom_attr_val_test" tid="62145">白色</span>
		  <span class="li_empty"> </span>
		  </li><li style="display: inline-block;" class="li_width  in_all">
		 <label class="in_all">
		 <input type="checkbox" t_value="红色" value="62146" name="goodsAttrId[]" class="chcBox_Width" id_62146="62146" id="Checkbox3">
		  </label>
		  <span class="span_nom_attr_val_test" tid="62146">红色</span>
		  <span class="li_empty"> </span>
		  </li>
		  
	  </ul>
	  </div>
	 <div class="div_contentlist">
		 <ul>
			 <li>
				<div id="createTable-create"></div>
			 </li>
		 </ul>
	 </div>
 </div>
<--script-->
 
 //==================
	$(function(){
	    var arr_val = new Array();
		
	    //===============================
		$("input[name='Txt_PriceSon[]']").live('blur',function(){ if($(this).val()){ arr_val[$(this).attr('str-price')]=$(this).val();}});
        $("input[name='Txt_CountSon[]']").live('blur',function(){ if($(this).val()){ arr_val[$(this).attr('str-count')]=$(this).val(); }});
        $("input[name='Txt_NumberSon[]']").live('blur',function(){ if($(this).val()){ arr_val[$(this).attr('str-number')]=$(this).val();}});
        $("input[name='Limit_NumberSon[]']").live('blur',function(){ if($(this).val()){ arr_val[$(this).attr('str-limit')]=$(this).val();}});
        $("input[name='Txt_SnSon[]']").live('blur',function(){ if($(this).val()){ arr_val[$(this).attr('str-sn')]=$(this).val();} });
        
	
		//规格信息
		$(".div_contentlist label").live("click", function(){
			step.Creat_Table();
		});
		
		var step = {
			//规格信息组合
			Creat_Table: function () {
				step.hebingFunction();
				var SKUObj = $(".Father_Title");
				//var skuCount = SKUObj.length;//
				var arrayTile = new Array();       //标题组数
				var arrayInfor = new Array();      //盛放每组选中的CheckBox值的对象
				var arrayInfor_n = new Array();    //盛放每组选中的CheckBox值的对象,指非自定义的属性值
				var arrayColumn = new Array();     //指定列,用来合并哪些列
				var bCheck = true;//是否全选
				var columnIndex = 0;
				var y=0;
				$.each(SKUObj, function (i, item){
					arrayColumn.push(columnIndex);
					columnIndex++;
					arrayTile.push(SKUObj.find("li").eq(i).html().replace(":", ""));
					var itemName = "Father_Item" + i; //选中的CHeckBox取值
					var order = new Array();
					var order_n = new Array();
					$("." + itemName + " input[type=checkbox]:checked").each(function (){
						//order.push($(this).val());
						order.push($(this).attr("t_value"));
						order_n.push($(this).attr("value"));
					});
					arrayInfor.push(order);
					arrayInfor_n.push(order_n);
					if (order.join() == ""){
						bCheck = false;
					}
					//var skuValue = SKUObj.find("li").eq(index).html();
				});//开始创建Table表
				if (bCheck == true) {
					//隐藏库存和价格
					$('#Goods_goods_number,#Goods_goods_price,#Goods_buy_limit').hide();
					$('.goods_number_hide').hide();

					var RowsCount = 0;
					$("#createTable-create").html("");
					var table = $("<table class=\"list_table\" id=\"process\" border=\"1px;\" cellpadding=\"1\" cellspacing=\"0\" style=\"width:80%;padding:5px;\"></table>");
					table.appendTo($("#createTable-create"));
					var thead = $("<thead> </thead>");
					thead.appendTo(table);
					var trHead = $("<tr></tr>");
					trHead.appendTo(thead);
					//创建表头
					$.each(arrayTile, function (index, item) {
						var td = $("<th>" + item + "</th>");
						td.appendTo(trHead);
					});
					var itemColumHead = $("<th  style=\"width:70px;\">价格</th><th style=\"width:70px;\">库存</th> ");
					itemColumHead.appendTo(trHead);
					var itemColumHead2 = $("<th>限制每次购买量</th><th>商家编码</th><th>商品条形码</th>");
					itemColumHead2.appendTo(trHead);
					var tbody = $("<tbody> </tbody>");
					tbody.appendTo(table);
					////生成组合
					var zuheDate = step.doExchange(arrayInfor);
					var zuheDate_n = step.doExchange(arrayInfor_n);
					//alert(zuheDate_n);

					if (zuheDate.length > 0){
						//创建行
						$.each(zuheDate, function(index, item){
							//alert(zuheDate_n[index]);
							var td_array = item.split(",");
							var td_array_n = (zuheDate_n[index]).split(",");
							
							//=========================================
							var str_price=(arr_val['p_'+td_array_n]!=undefined)?arr_val['p_'+td_array_n]:'';
							var str_count=(arr_val['c_'+td_array_n]!=undefined)?arr_val['c_'+td_array_n]:'';
							var str_limit=(arr_val['l_'+td_array_n]!=undefined)?arr_val['l_'+td_array_n]:'';
							var str_number=(arr_val['n_'+td_array_n]!=undefined)?arr_val['n_'+td_array_n]:'';
							var str_sn=(arr_val['s_'+td_array_n]!=undefined)?arr_val['s_'+td_array_n]:'';
							//=========================================
							
							var tr = $("<tr> </tr>");
							tr.appendTo(tbody);
							$.each(td_array, function(i, values){
                                if(i==0){
                                    if(td_array_n[i+1]!='undefined')
                                        var td = $("<td >" + values + "</td> <input type='hidden' name='AttrbuteColor[]' value='"+td_array_n[i]+":"+td_array_n[i+1]+"'> ");
                                    else
                                        var td = $("<td >" + values + "</td> <input type='hidden' name='AttrbuteColor[]' value='"+td_array_n[i]+"'> ");
                                }else{   
                                    var td = $("<td >" + values + "</td>");
                                }
                                td.appendTo(tr);
							});
							
							var td1 = $("<td ><input str-price='p_"+td_array_n+"' name=\"Txt_PriceSon[]\" style=\"width: 106px;\" class=\"l-text\" type=\"text\" value='"+str_price+"'></td>");
							td1.appendTo(tr);
							var td2 = $("<td ><input str-count='c_"+td_array_n+"' name=\"Txt_CountSon[]\" style=\"width: 106px;\" class=\"l-text\" type=\"text\" value='"+str_count+"'></td>");
							td2.appendTo(tr);
							var td3 = $("<td ><input str-limit='l_"+td_array_n+"' name=\"Limit_NumberSon[]\" style=\"width: 106px;\" class=\"l-text\" type=\"text\" value='"+str_limit+"'></td>");
							td3.appendTo(tr);
							var td4 = $("<td ><input str-number='n_"+td_array_n+"' name=\"Txt_NumberSon[]\"  style=\"width: 106px;\" class=\"l-text\" type=\"text\" value='"+str_number+"'></td>");
							td4.appendTo(tr);
							var td5 = $("<td ><input str-sn='s_"+td_array_n+"' name=\"Txt_SnSon[]\"  style=\"width: 106px;\" class=\"l-text\" type=\"text\" value='"+str_sn+"'></td>");
							td5.appendTo(tr);
				
						});
					}
					//结束创建Table表
					arrayColumn.pop();//删除数组中最后一项
					//合并单元格
					$(table).mergeCell({
						// 目前只有cols这么一个配置项, 用数组表示列的索引,从0开始
						cols: arrayColumn
					});
				} else{
					//显示隐藏的库存和价格
					$('#Goods_goods_number,#Goods_goods_price,#Goods_buy_limit').show();
					$('.goods_number_hide').show();
					//未全选中,清除表格
					document.getElementById('createTable-create').innerHTML="";
				}
			},//合并行
			hebingFunction: function(){
				$.fn.mergeCell = function (options) {
					return this.each(function () {
						var cols = options.cols;
						for (var i = cols.length - 1; cols[i] != undefined; i--) {
							// fixbug console调试
							// console.debug(cols[i]);
							mergeCell($(this), cols[i]);
						}
						dispose($(this));
					});
				};
				function mergeCell($table, colIndex) {
					$table.data('col-content', ''); // 存放单元格内容
					$table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1
					$table.data('col-td', $()); // 存放发现的第一个与前一行比较结果不同td($封装过的), 默认一个"空"$对象
					$table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
					// 进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
					$('tbody tr', $table).each(function (index) {
						// td:eq中的colIndex即列索引
						var $td = $('td:eq(' + colIndex + ')', this);
						// 取出单元格的当前内容
						var currentContent = $td.html();
						// 第一次时走此分支
						if ($table.data('col-content') == '') {
							$table.data('col-content', currentContent);
							$table.data('col-td', $td);
						} else {
							// 上一行与当前行内容相同
							if ($table.data('col-content') == currentContent) {
								// 上一行与当前行内容相同则col-rowspan累加, 保存新值
								var rowspan = $table.data('col-rowspan') + 1;
								$table.data('col-rowspan', rowspan);
								// 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响
								$td.hide();
								// 最后一行的情况比较特殊一点
								// 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
								if (++index == $table.data('trNum'))
									$table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
							} else { // 上一行与当前行内容不同
								// col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
								if ($table.data('col-rowspan') != 1) {
									$table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
								}
								// 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
								$table.data('col-td', $td);
								$table.data('col-content', $td.html());
								$table.data('col-rowspan', 1);
							}
						}
					});
				}
				// 同样是个private函数 清理内存之用
				function dispose($table) {
					$table.removeData();
				}
			},
			//组合数组
			doExchange: function (doubleArrays) {
				var len = doubleArrays.length;
				if (len >= 2) {
					var arr1 = doubleArrays[0];
					var arr2 = doubleArrays[1];
					var len1 = doubleArrays[0].length;
					var len2 = doubleArrays[1].length;
					var newlen = len1 * len2;
					var temp = new Array(newlen);
					var index = 0;
					for (var i = 0; i < len1; i++) {
						for (var j = 0; j < len2; j++) {
							temp[index] = arr1[i] + "," + arr2[j];
							index++;
						}
					}
					var newArray = new Array(len - 1);
					newArray[0] = temp;
					if (len > 2) {
						var _count = 1;
						for (var i = 2; i < len; i++) {
							newArray[_count] = doubleArrays[i];
							_count++;
						}
					}
					//console.log(newArray);
					return step.doExchange(newArray);
				}
				else {
					return doubleArrays[0];
				}
			}
		}
		
		
		
		return step;
	});
//======================
 

 
 <--/script---->

大家帮忙改改

您需要登录后才可以回复。登录 | 立即注册