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