结合jquery的js实现多商品属性灵活设置,如商品的颜色、尺码、体重、年龄等属性设置

现在网购商品几乎都是多商品属性的天下了,从淘宝、天猫、京东、当当、亚马逊及各路大小电商,商品的属性几乎全是灵活的多属性,这对于后台的设置及管理也是个不大不小的技术难题,近日写了一个,分享给大家。虽然还有待完善,但是已经可以使用。欢迎技术更强者指点指点。bubufx#qq.com(#换成@)。


先上效果图:

结合jquery的js实现多商品属性灵活设置,如商品的颜色、尺码、体重、年龄等属性设置

html代码(复制下来存入html文件,再拷贝过去jquery-1.8.1.min.js即可运行):


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
	<script language="javascript" type="text/javascript" src="jquery-1.8.1.min.js"></script>
	<script language="javascript" type="text/javascript">
	
	function delAttribute(attrID)
	{		
		$("#divAttr"+attrID).remove();
				
		selectAttributeValue();
		
		$("#content").val("bubufx_divAttributes的值\n"+$("#bubufx_divAttributes").html());
	}
	
	function addAttribute()
	{
		//取得当前已添加属性中最大的ID,在此基础上加1,是新添加属性的ID
		var attrArr = document.getElementsByName("attr_bubufx_Name");
		var attrID=1;
		if(attrArr.length>0)
			attrID = parseInt(attrArr[attrArr.length-1].value) + 1;
		//
				
		var attrHtmlOne="";
		
		//组成一个属性,将属性的ID存入hidden中
		attrHtmlOne="<div id=\"divAttr"+attrID+"\" name=\"divAttr\">"+
					"<span><input type=\"text\" id=\"tbAttr"+attrID+"\" name=\"tbAttr"+attrID+"\" value=\"\" size=\"5\" style=\"background-color:#ccc\" /></span>"+
					"<span id=\"attrZiSpan"+attrID+"\"></span>"+
					"<span>"+
					"<input id=\"attrZiCount"+attrID+"\" type=\"hidden\" value=\"0\" />"+
					"<input type=\"button\" onclick=\"addAttributeValue(’"+attrID+"’)\" value=\"+添加\" />"+
					"<input type=\"button\" onclick=\"delAttribute(’"+attrID+"’)\" value=\"-删除\" />"+
					"</span>"+
					"<input id=\"attrID_"+attrID+"\" name=\"attr_bubufx_Name\" type=\"hidden\" value=\""+attrID+"\" />"+
					"</div>";
				
		//添加一个属性
		$("#bubufx_divAttributes").append(attrHtmlOne);
		
		
		$("#content").val("bubufx_divAttributes的值\n"+$("#bubufx_divAttributes").html());
		
	}
	
	//添加子属性
	function addAttributeValue(attrID)
	{
		var attrZiCount = parseInt($("#attrZiCount"+attrID).val());
		var attrZiCurrent = attrZiCount+1;
		
		
		var attrHtmlZiOne="";
		
		attrHtmlZiOne = "<span><input type=\"checkbox\" id=\"cbAttr"+attrID+attrZiCurrent+"\" name=\"cbAttr"+attrID+attrZiCurrent+"\" onclick=\"selectAttributeValue()\" /></span>"+
						"<span><input type=\"text\" id=\"tbAttrZi"+attrID+attrZiCurrent+"\" name=\"tbAttrZi"+attrID+attrZiCurrent+"\" value=\"\" size=\"5\" /></span>"+
						"&nbsp;&nbsp;";
		
		
		//添加一个子属性
		$("#attrZiSpan"+attrID).append(attrHtmlZiOne);
		
		//增加子属性数量
		$("#attrZiCount"+attrID).val(parseInt($("#attrZiCount"+attrID).val())+1);
		//
		
		$("#content").val("bubufx_divAttributes的值\n"+$("#bubufx_divAttributes").html());
	}
	
	
	function selectAttributeValue() 
	{
		//用name属性获得所有属性ID的数组
		var attrArr = document.getElementsByName("attr_bubufx_Name");
		
		var tabstr = "";
		
		if(attrArr.length>0)
		{		
			var tabWidth = 700 + 100 * attrArr.length;
			tabstr=tabstr+"<table width=\""+tabWidth+"\" border=\"1\" id=\"bubufx_tabAttributeset\">";
			
			//添加表头
			tabstr=tabstr+"<tr>";
			
			for(var acI=0;acI<attrArr.length;acI++)
			{
				tabstr=tabstr+"<td bgcolor=\"#CCFFFF\">"+$("#tbAttr"+attrArr[acI].value).val()+"</td>";
			}
			
			tabstr=tabstr+"<td bgcolor=\"#CCFFFF\">库存量</td>";
			tabstr=tabstr+"<td bgcolor=\"#CCFFFF\">价格</td>";
			tabstr=tabstr+"<td bgcolor=\"#CCFFFF\">监测数据</td>";
			tabstr=tabstr+"</tr>";
			//
			
			//递归,返回
			tabstr=tabstr+getAttr(1,"1");	//lelString初始化是1,无实际意义
			//
			
			
			tabstr=tabstr+"</table>";
		
		}
		
		$("#bubufx_tabAttributes").html(tabstr);
		$("#bubufx_tabAttributes").html("\n\n"+tabstr);
		
		
		$("#contentV").val("bubufx_tabAttributes的值\n"+$("#bubufx_tabAttributes").html());
		
	}
	
	
	
	function getAttr(cAttrLevel,lelString)
	{		
		//cAttrLevel是当前属性层,lelString层字符串(2,1,3,第一层属性第2个,第二层属性第1个,第三层属性第3个)
		
		var rStr="";	//返回字符串
		
		//属性ID字符串
		var attrArr = document.getElementsByName("attr_bubufx_Name");
		
		//当前属性ID
		var cAttrID=parseInt(attrArr[cAttrLevel-1].value);
		
		
		//当前属性中子属性数量
		var jCount=parseInt($("#attrZiCount"+cAttrID).val());
		
		//循环子属性
		for(var j = 1;j <= jCount;j++)
		{			
			if(parseInt(cAttrLevel) < attrArr.length)
			{
				rStr=rStr+getAttr(cAttrLevel+1,lelString+","+j);
			}	
			else
			{
				var lelStringArr=(lelString+","+j).split(",");
				
				//判断是否选中,全部选中才显示
				var cbFlag=true;
				for(var x=1;x<lelStringArr.length;x++)
				{
					var _aID = parseInt(attrArr[x-1].value);
					
					if(!$("#cbAttr"+_aID+lelStringArr[x]).attr("checked"))
						cbFlag=false;	
				}
				//
			
				if(cbFlag)
				{
					var IDstr="";	//存放ID,用于定位生成,的行如2_1_3,表示第一个属性的第2个,第二个属性的第1个,第三个属性的第3个
					var DESstr="";	//属性值,临时显示
					rStr=rStr+"<tr>";					
					
					
					for(var n=1;n<lelStringArr.length;n++)
					{
						var _nID = parseInt(attrArr[n-1].value);
						rStr=rStr+"<td>"+$("#tbAttrZi"+_nID+lelStringArr[n]).val()+"</td>";	
						
						IDstr = (IDstr == ""?lelStringArr[n]:IDstr + "_" + lelStringArr[n]);
						DESstr = (DESstr == ""?$("#tbAttrZi"+_nID+lelStringArr[n]).val():DESstr + "," + $("#tbAttrZi"+_nID+lelStringArr[n]).val());								
					}
					
					var IDshiji="";
					
					IDshiji=idJiexi(IDstr);
					
					rStr=rStr+"<td><input id=\"kucun_"+IDstr+"\" name=\"kucun_"+IDstr+"\" type=\"text\" size=\"10\" /></td>";
					rStr=rStr+"<td><input id=\"jiage_"+IDstr+"\" name=\"jiage_"+IDstr+"\" type=\"text\" size=\"10\" /></td>";
					rStr=rStr+"<td>tech.bubufx.com提示:【"+IDshiji+"】【"+IDstr+"|"+DESstr+"】</td>";				
					
					rStr=rStr+"<input id=\"tbHDid_"+IDstr+"\" name=\"tbHDname\" type=\"hidden\" value=\""+IDstr+"\" />";
					rStr=rStr+"</tr>";
				}
			}
		}
		//
		
		return rStr;
		
	} 
	
	//通过ID解析出属性控件ID,并通过属性控件ID获得属性描述
	function idJiexi(idStr)
	{
		//属性ID字符串
		var attrArr = document.getElementsByName("attr_bubufx_Name");
		
		var strArr=("0_"+idStr).split("_");
		
		var rStr="";
		var rDesStr="";
		
		for(var i=1;i<strArr.length;i++)
		{
			if(rStr=="")
				rStr=attrArr[i-1].value+strArr[i];
			else
				rStr=rStr+"_"+attrArr[i-1].value+strArr[i];
				
			if(rDesStr=="")
				rDesStr=$("#tbAttrZi"+attrArr[i-1].value+strArr[i]).val();
			else
				rDesStr=rDesStr+"_"+$("#tbAttrZi"+attrArr[i-1].value+strArr[i]).val();
		}
		
		return "ID("+rStr+")通过ID取值("+rDesStr+")";
	}
	
	function getAttrVal()
	{
		var cDiv = document.getElementsByName("tbHDname"); 
		
		var str="";
		
		if(cDiv.length>0)
		{
			for(var i=0;i<cDiv.length;i++)
			{
				var _ID=$("#tbHDid_"+cDiv[i].value).val();
				str=str+"[id="+_ID+"]["+$("#kucun_"+_ID).val()+"],["+$("#jiage_"+_ID).val()+"],["+$("#huohao_"+_ID).val()+"]\r\n";
			}
		}
		
		
		$("#content").val("bubufx_tabAttributes的值\n"+str);
		
	}
    </script>
</head>

<body>
    <input type="button" value="添加属性" onclick="addAttribute()" />
    <div id="bubufx_divAttributes"></div>
    <div id="bubufx_tabAttributes"></div>
   
<p>
  <input name="button" type="button" onclick="getAttrVal()" value="商品属性取值" />
</p>
<p> 监测生成的代码:</p>
<p><textarea id="content" name="content" rows="20" cols="70"></textarea><textarea id="contentV" name="contentV" rows="20" cols="70"></textarea></p>
</body>
</html>
本代码使用的jquery是1.8.3版本,对应文件“jquery-1.8.1.min.js”。


结合jquery的js实现多商品属性灵活设置,如商品的颜色、尺码、体重、年龄等属性设置

上一篇:html中Table标签被web编程弃用的原因分析


下一篇:服装五金配件三维扫描方案_三维扫描仪