/** * 分类读取 */ /* fix createoption 前的注释会造成 ie6 无法识别 toselect,去掉注释或加空格。 */ if (typeof(string.prototype.repeat) == "undefined"){ string.prototype.repeat = function(l){ return new array(l*2+1).join(this); }; } if (typeof(labelloader) == "undefined"){ var labelloader = function(){ /* 读取 */ this.loadcount = 0; this.loader = function(){ try{ var _params = this.params; var _url = _params.url; var _mapping = _params.mapping; var _toel = _params.toel; var selfobj = this; /** * 读取条 */ _params.waiter = (typeof(_params["waiter"]) =="undefined")?"._waiter":_params["waiter"]; var isonlyfirstchildren = !!_params.isonlyfirstchildren; var _waiter =jquery(_params.waiter); _waiter.show();// // this.loadcount++; jquery.getjson(_url, function(json){ if (!json){ _waiter.fadeout("slow"); return; } this.loadcount = -1; var _labelinfo; var _labelinfo_result; var _labelinfolist = []; /** * 完成不同来源的转换 articlelabelid -> sid **/ for(var _key in json){ _labelinfo_result = {}; _labelinfo = json[_key]; for(var _mkey in _mapping) { _labelinfo_result[_mkey] = _labelinfo[_mapping[_mkey]]; } if (isonlyfirstchildren ){ if (_labelinfo_result['pid'] != _params.cid){ continue; } _labelinfo_result['pid'] = 0; } _labelinfolist.push(_labelinfo_result); } selfobj.labelinfolist = _labelinfolist; selfobj.labelinfolist = selfobj.getlabelinfolist(); selfobj._caculatedeep(); // alert(selfobj.labelinfolist.tosource()); // alert(selfobj.getlabelbypid(0)); var _cel ; // 当前 var _ctagname ; // 当前 var _cellist ; // 当前 var _ctemplete ; // 当前 var _cstyle ; // 当前 var _cevent ; // 当前 for(var _ekey in _toel) { _cel = _toel[_ekey]; _ctagname = _cel.tagname; _cellist = _cel.ellist; switch(_ctagname) { case "select": selfobj.toselect(_cellist); break; case "div": _ctemplete = _cel.templete; _cstyle = _cel.style; _cevent = _cel.event; selfobj.todiv(_cellist,_ctemplete,_cstyle,_cevent); break; case "crumb": _ctemplete = _cel.templete; var _cposition = _cel.position; selfobj.tocrumb(_cellist,_ctemplete,_cposition); break; } // if (_ctagname == "select"){ // }else if(_ctagname == "div"){ // } } // }catch(e){ // return false; // }; _waiter.fadeout("slow"); }); }catch(e){ if (this.loadcount != -1 && this.loadcount < 3){ this.loader(); } } }; this.params = null; this.cid = null; this.init = function(_params){ this.params = _params; this.cid = _params.cid; this.loader(); }; /* 分类列表 */ this.labelinfolist = []; /* 样式集合 */ this.style = { _pel :"", // 父元素 样式 _cel :"" // 子元素 样式 }; /* 创立一个option对象 */ this.createoption = function(_value,_name,_selected,_id){ // var _option = jquery(document.createelement("option")); var _option = document.createelement("option"); if (typeof(_value) == "string") { _option.value = _value; if (_id) { _option.id = _id; } _option.text = _name; _option.selected = _selected; } return _option; }; /* 追加入select 中 以option列出 */ this.toselect = function(_selectlist){ var _selectlist_len = _selectlist.length; var _optionlist ; var _optionlist_len ; var _cselecter ; var _option; for(var _i=0;_i<_selectlist_len;_i++){ _cselecter = document.getelementbyid(_selectlist[_i]); // _cselecter = jquery("#"+_selectlist[_i]); if(!_cselecter){ continue; } _optionlist = this.createoptionlist(); _optionlist_len = _optionlist.length; for(var _okey =0;_okey<_optionlist_len;_okey++) { _option = _optionlist[_okey]; if(_option){ _cselecter.options.add(_option); } } } }; this._getparentdeep = function(id){ var label; for(var i in this.labelinfolist){ label= this.labelinfolist[i]; if (label['sid'] == id){ return label['deep']; } } return 0; }; this._caculatedeep = function(){ var label; for(var i in this.labelinfolist){ label= this.labelinfolist[i]; if (label['pid'] == 0){ label['deep'] = 0; }else{ label['deep'] = this._getparentdeep(label['pid'])+1; } this.labelinfolist[i] = label; } }; /** * 创建option列表 **/ this.createoptionlist = function(){ var _optionlist = new array(); var _labelinfo; var _option; var _value,_name,_selected,_id,_deep; var _cid = this.cid; var _labelinfolist = this.labelinfolist; var _labelinfolist_len = _labelinfolist.length; for(var _lkey=0;_lkey<_labelinfolist_len;_lkey++) { _labelinfo = _labelinfolist[_lkey]; _value = _labelinfo["sid"]; _deep = _labelinfo["deep"]; // parseint _name = _labelinfo["name"]; if(jquery.browser.msie) { _deep = " ".repeat(_deep*2); _name = _deep+_name; }else{ _deep = _deep*10+"px"; } _selected = (_value==_cid)?true:false; _id = null; _option = this.createoption(_value,_name,_selected,_id); if(!jquery.browser.msie) { _option.style.paddingleft = _deep; } _optionlist.push(_option); preparent = _labelinfo['pid']; } return _optionlist; }; this.replacer = function(labelinfo,filler,style){ var _result = ""; var cid = this.cid; // 当前分类 try{ labelinfo["title"] = labelinfo["name"]; if (typeof(filler) == "string"){ if (labelinfo["sid"] == cid){ if (style && typeof(style['ael']) == 'string'){ filler = filler.replace(new regexp("\\{aclass\\}","ig"),style['ael']); }else{ filler = filler.replace(new regexp("\\{aclass\\}","ig"),""); } } filler = filler.replace(new regexp("\\{name\\}","ig"),labelinfo["name"]); filler = filler.replace(new regexp("\\{title\\}","ig"),labelinfo["title"]); filler = filler.replace(new regexp("\\{pid\\}","ig"),labelinfo["pid"]); filler = filler.replace(new regexp("\\{sid\\}","ig"),labelinfo["sid"]); filler = filler.replace(new regexp("\\{order\\}","ig"),labelinfo["order"]); // filler = filler.replace(new regexp("\\{pic}","ig"),labelinfo["pic"]); filler = filler.replace(new regexp("\\{url\\}","ig"),labelinfo["url"]); filler = filler.replace(new regexp("\\{brief}","ig"),labelinfo["brief"]); _result = filler; delete filler; }else if(typeof(filler) == "function") { _result = filler(labelinfo); } }catch(e){ // if (console && console['log']){ // console.log(e); // } } return _result; }; /** * 制取一个行对象 作为子集元素 **/ this.__line_object_ = "__line_object_"; this.__line_bindable_ = "__line_bindable_"; this.getcline = function(labelinfo,templete,style){ try{ /** * 制取填充物! **/ var _filler = templete.filler; var _cel = templete.cel; // 子集元素 var _fel = (typeof(templete["fel"]) == "undefined") ? "div" : templete['fel']; // 总父级元素 var _prefixel = null; if (typeof(_filler) == 'object' && _filler['inner'] != null && _filler['outter'] != null){ var url = jquery.trim(labelinfo['url']) ; if (url != null && url.length > 0 ){ _filler = this.replacer(labelinfo,_filler['outter'],style); }else{ _filler = this.replacer(labelinfo,_filler['inner'],style); } }else{ _filler = this.replacer(labelinfo,_filler); } if(_filler != null) { var _parentel = jquery(document.createelement(_cel)); var _fillel = jquery(document.createelement(_fel)); if (typeof(templete["felclass"]) != "undefined"){ _fillel.attr("classname",templete["felclass"]); } _fillel.addclass(this.__line_object_); _fillel.html(_filler); if (templete["prefix"]) { _prefixel = (typeof(templete["prefix"]["el"]) == "undefined") ? "div" : templete["prefix"]["el"]; _prefixel = jquery(document.createelement(_prefixel)); var _cclass = (typeof(templete["prefix"]["cclass"]) == "undefined") ? null: templete["prefix"]["cclass"]; if (_cclass != null) { _prefixel.addclass(_cclass); } } if (_prefixel) { _parentel.append(_prefixel); } _parentel.addclass(style["cel"]); _parentel.append(_fillel); return _parentel; }else{ return null; } }catch(e){ // alert(e) return null; } }; this.blindlineevents = function(area,event){ if (event && event["cel"]) { jquery("."+this.__line_object_,area).each(function(e){ var events = event["cel"]; var selfobj = jquery(this); // var ename; // for(ename in events) // { // _fillel.bind(ename, function(){ // events[ename](this); // }); // } events(selfobj.parent(),selfobj); // selfobj.removeclass(this.__line_object_); }); } }; /** * 填充子集元素 **/ this.appendchildren = function(pnode,cnode,templete,style){ try{ var pel = (typeof(templete["pel"]) == "undefined") ? "ul" : templete["pel"]; var _isexistpel = jquery(pel+":first",pnode); // 当前需要载入子集元素的元素内是否包含父级html元素 if (_isexistpel.html() != null) { _isexistpel.append(cnode); }else{ var _cpnode = jquery(document.createelement(pel)); _cpnode.addclass(style["pel"]); _cpnode.append(cnode); pnode.append(_cpnode); // var _cpnode = document.createelement(pel); // cnode.appendto(_cpnode); // pnode.append(_cpnode); } var _prefixel = null; if (templete["prefix"]) { _prefixel = (typeof(templete["prefix"]["el"]) == "undefined") ? "div" : templete["prefix"]["el"]; _prefixel = jquery(_prefixel+":first",pnode); var _pclass = (typeof(templete["prefix"]["pclass"]) == "undefined") ? null: templete["prefix"]["pclass"]; if (_pclass != null) { _prefixel.removeclass(); _prefixel.addclass(_pclass); } } return pnode; } catch(e){ return null; } }; /* 追加在 div 中以 ul + li 显示 */ this.todiv = function(_divlist,templete,style,event){ var _sid,_name,_selected,_deep; // 各项属性 var _cid = this.cid; var _labelinfolist = this.labelinfolist; // 处理过的数据集 var _labelinfolist_len = _labelinfolist.length; var _nodeinfo = null;// 节点信息 var _labelinfo = null;// 分类信息 var _nodestack= new object(); var _sid = null; var _pid = null; var _order = null; var _area = null; // 放置区域 var _pel = templete.pel; // 父集元素 var _cel = templete.cel; // 子集元素 // var _cel = templete.cel; // 子集元素 var prefix = templete.prefix; // 子集元素 for(var i=0;i<_labelinfolist_len ;i++) { _labelinfo = _labelinfolist[i]; _sid = _labelinfo['sid']; _pid = _labelinfo['pid']; _order = _labelinfo['order']; _nodeinfo = this.getcline(_labelinfo,templete,style,event); if (typeof(_nodeinfo) == "undefined"){ continue; } _nodestack[_sid+'_'] = _nodeinfo; } _area = jquery("#"+_divlist.pop()); for(var _id in _nodestack) { _area.append(_nodestack[_id]) ; } var _selfnod = null; for(i=0;i<_labelinfolist_len ;i++) { _labelinfo = _labelinfolist[i]; _sid = _labelinfo['sid']; _pid = _labelinfo['pid']; _order = _labelinfo['order']; if (_pid != 0) { if (typeof(_nodestack[_pid+'_']) != "undefined") { // _nodestack[_pid+'_'].append(_nodestack[_sid+'_']); this.appendchildren(_nodestack[_pid+'_'],_nodestack[_sid+'_'],templete,style); } } // root } for(i=0;i<_labelinfolist_len ;i++) { _labelinfo = _labelinfolist[i]; _sid = _labelinfo['sid']; _pid = _labelinfo['pid']; _order = _labelinfo['order']; if (_pid == 0) { _selfnod = _nodestack[_sid+'_']; if (_selfnod.children(_pel).html() == null){ if (prefix){ _selfnod.children(prefix.el+":first").attr("classname",prefix.pclass); } } } // root } var _pnode = jquery(document.createelement(_pel)); _pnode.addclass(style['fpel']); // 最上端父级class // _pnode.append(_area.html()); // _area.html(_pnode); _area.wrapinner(_pnode); // _area.find(_pel).each(function(){ // jquery(this).children(_cel+":first").children(prefix.el).attr("classname","pprefix_first"); // jquery(this).children(_cel+":last").children(prefix.el).attr("classname","pprefix_last"); // }); if (typeof(templete['treeview']) != "undefined") { if (templete['treeview'] == true) { _area.treeview(); } }else{ _area.treeview(); } if (!_divlist || _divlist.length == 0){ // return; } var _ckey = null; var _carea = null; this.blindlineevents(_area,event); for(i= _divlist.length;i>0;i--) { _ckey = _divlist[i-1]; // if (_ckey != 0) // { _carea = jquery("#"+_ckey); _carea.append(_area.children().clone(true)); this.blindlineevents(_carea,event); // } } // document.write(""); return ; }; this.getlabelinfolist = function(){ var _labelinfolist = new array(); var _labellist = this.getlabelbypid(0,"desc"); var _cnode; var _subnodes; var _is; while(_labellist.length>0) { _cnode = _labellist.pop(); _labelinfolist.push(_cnode); _subnodes = this.getlabelbypid(_cnode["sid"],"desc"); for(_is=0;_is<_subnodes.length;_is++) { _labellist.push(_subnodes[_is]); } } return _labelinfolist; }; /* 面包屑 crumb */ this.tocrumb = function(_crumblist,templete,_cposition){ var _crumblist_len = _crumblist.length; var _optionlist ; var _optionlist_len ; var _cselecter ; var _option; var _crumbcontent = this.createcrumb(templete); for(var _i=0;_i<_crumblist_len;_i++){ // _ccrumb = document.getelementbyid(_crumblist[_i]); _ccrumb = jquery("#"+_crumblist[_i]); if(!_ccrumb){ continue; } if (_cposition == "replace"){ _ccrumb.html(_crumbcontent); }else{ _ccrumb.append(_crumbcontent); } } }; /* 建立 crumb */ this.createcrumb = function(templete){ var _labelinfolist = this.labelinfolist; // 处理过的数据集 var _labelinfolist_len = _labelinfolist.length; var _cid = this.cid; var _ptree = new array(); var _labelinfo; for(var i=0;i<_labelinfolist_len;i++) { _labelinfo = _labelinfolist[_labelinfolist_len-i-1]; // 当前 if (_labelinfo['sid'] == _cid){ _cid = _labelinfo['pid']; _ptree.push(_labelinfo); } } var _returnhtml = ""; while(_ptree.length > 0) { _labelinfo = _ptree.pop(); _returnhtml += this.replacer(_labelinfo,templete); } return _returnhtml; }; /* 获取 父级编号 为 _pid的所有信息 */ this.getlabelbypid = function(_pid,_order){ var _returninfo = new array(); var _labelinfolist = this.labelinfolist; if (!_labelinfolist){ return _returninfo; } var _labelinfolist_len = _labelinfolist.length; var _labelinfo; for(var i=0;i<_labelinfolist_len;i++) { _labelinfo = _labelinfolist[i]; // 当前 if (_labelinfo['pid'] == _pid){ _returninfo.push(_labelinfo); } } if (_order == "desc"){ _returninfo.sort(this._desc); }else{ _returninfo.sort(this._asc); } // } return _returninfo; }; /* 数组排序 */ this._desc = function(x,y) { x.order = parseint(x.order,"10"); y.order = parseint(y.order,"10"); if (x.order > y.order) { return -1; } if (x.order < y.order) { return 1; } return 0; }; this._asc = function(x,y) { x.order = parseint(x.order,"10"); y.order = parseint(y.order,"10"); if (x.order > y.order) { return 1; } if (x.order < y.order) { return -1; } return 0; }; }; } //[ //{sid:"2", pid:"0", name:"\u653f\u6cbb", order:"0", deep:"0"}, //{sid:"11", pid:"2", name:"\u653f\u6cbb\u7b2c\u4e00\u5b50\u96c6", order:"0", deep:"1"}, //{sid:"12", pid:"11", name:"\u653f\u6cbb\u7b2c\u4e8c\u5b50\u96c6", order:"0", deep:"2"}, //{sid:"1", pid:"0", name:"\u519b\u4e8b", order:"0", deep:"0"}, //{sid:"8", pid:"1", name:"\u519b\u4e8b\u7b2c\u4e00\u5b50\u96c6", order:"0", deep:"1"}, //{sid:"9", pid:"8", name:"\u519b\u4e8b\u7b2c\u4e8c\u5b50\u96c6", order:"0", deep:"2"}, //{sid:"10", pid:"9", name:"\u519b\u4e8b\u7b2c\u4e09\u5b50\u96c6", order:"0", deep:"3"} //]