梅花雪树1.0改造
由于項目需要,而1.0沒有checkbox等功能,所以增加了此部分功能代碼如下: <!--/*---------------------------------------------------------------------------*/|? Subject:?????? Web TreeView Class????????????????????????????????????????? ||? Version:?????? 1.0???????????????????????????????????????????????????????? ||? Author:??????? 黃方榮【meizz】【梅花雪】?????????????????????????????????? ||? FileName:????? MzTreeView.js?????????????????????????????????????????????? ||? Created:?????? 2004-10-18????????????????????????????????????????????????? ||? LastModified:? 2005-03-10????????????????????????????????????????????????? ||? Download:????? http://www.meizz.com/Web/Download/MzTreeView10.rar????????? ||? Explain:?????? http://www.meizz.com/Web/Article.asp?id=436???????????????? ||? Demo:????????? http://www.meizz.com/Web/Demo/MzTreeView10.htm????????????? ||???????????????????????????????????????????????????????????????????????????? ||???????????????? You may use this code on your item????????????????????????? ||???????????????? this entire copyright notice appears unchanged????????????? ||???????????????? and you clearly display a link to http://www.meizz.com/???? ||???????????????????????????????????????????????????????????????????????????? ||-----------------------------------------------------------------------------||? MSN: huangfr@msn.com?? QQ: 112889082?? http://www.meizz.com??????????????? ||? CSDN Community ID: meizz????? Copyright (c) 2004-2005 meizz??????????????? |/*---------------------------------------------------------------------------*/ //MzTreeView1.0網頁樹類, 在實例化的時候請把實例名作參數傳遞進來function MzTreeView(Tname){? if(typeof(Tname) != "string" || Tname == "")??? throw(new Error(-1, '創建類實例的時候請把類實例的引用變量名傳遞進來!'));? ? //【property】? this.url????? = "#";? this.target?? = "_self";? this.name???? = Tname;? this.wordLine = false;? this.currentNode = null;? this.useArrow = true;? this.nodes = {};? this.node? = {};? this.names = "";? this._d??? = "/x0f";? this.index = 0;? this.divider?? = "_";? this.cbm='';? this.node["0"] =? {??? "id": "0",??? "path": "0",??? "isLoad": false,??? "childNodes": [],??? "childAppend": "",??? "sourceIndex": "0"? }; ? this.colors?? =? {??? "highLight" : "#0A246A",??? "highLightText" : "#FFFFFF",??? "mouseOverBgColor" : "#D4D0C8"? };? this.icons??? = {??? L0??????? : 'L0.gif',? //┏??? L1??????? : 'L1.gif',? //┣??? L2??????? : 'L2.gif',? //┗??? L3??????? : 'L3.gif',? //━??? L4??????? : 'L4.gif',? //┃??? PM0?????? : 'P0.gif',? //+┏??? PM1?????? : 'P1.gif',? //+┣??? PM2?????? : 'P2.gif',? //+┗??? PM3?????? : 'P3.gif',? //+━??? empty???? : 'L5.gif',???? //空白圖??? root????? : 'root.gif',?? //缺省的根節點圖標??? folder??? : 'folder.gif', //缺省的文件夾圖標??? file????? : 'file.gif',?? //缺省的文件圖標??? exit????? : 'exit.gif'? };? this.iconsExpand = {? //存放節點圖片在展開時的對應圖片??? PM0?????? : 'M0.gif',???? //-┏??? PM1?????? : 'M1.gif',???? //-┣??? PM2?????? : 'M2.gif',???? //-┗??? PM3?????? : 'M3.gif',???? //-━??? folder??? : 'folderopen.gif', ??? exit????? : 'exit.gif'? };this.checkboxView=false;this.setCheckboxView=function(bo){?this.checkboxView=bo;}? //擴展 document.getElementById(id) 多瀏覽器兼容性? //id 要查找的對象 id? this.getElementById = function(id)? {??? if (typeof(id) != "string" || id == "") return null;??? if (document.getElementById) return document.getElementById(id);??? if (document.all) return document.all(id);??? try {return eval(id);} catch(e){ return null;}? } ? //MzTreeView 初始化入口函數? this.toString = function()? {??? this.browserCheck();??? this.dataFormat();??? this.setStyle();??? this.load("0");??? var rootCN = this.node["0"].childNodes;??? var str = "<A id='"+ this.name +"_RootLink' href='#' style='DISPLAY: none'></A>";??? ??? if(rootCN.length>0)??? {????? this.node["0"].hasChild = true;????? for(var i=0; i<rootCN.length; i++)??????? str += this.nodeToHTML(rootCN[i], i==rootCN.length-1);????? setTimeout(this.name +".expand('"+ rootCN[0].id +"', true); "+ ??????? this.name +".focusClientNode('"+ rootCN[0].id +"'); "+ this.name +".atRootIsEmpty()",10);??? } ??? if (this.useArrow)? //使用方向鍵控制跳轉到上級下級父級子級節點??? {????? if (document.attachEvent)????????? document.attachEvent("onkeydown", this.onkeydown);????? else if (document.addEventListener)????????? document.addEventListener('keydown', this.onkeydown, false);??? }??? return "<DIV class='MzTreeView' "+????? "οnclick='"+ this.name +".clickHandle(event)' "+????? "οndblclick='"+ this.name +".dblClickHandle(event)' "+????? ">"+ str +"</DIV>";? }; ? this.οnkeydοwn= function(e)? {??? e = window.event || e; var key = e.keyCode || e.which;??? switch(key)??? {????? case 37 : eval(Tname).upperNode(); break;? //Arrow left, shrink child node????? case 38 : eval(Tname).pervNode();? break;? //Arrow up????? case 39 : eval(Tname).lowerNode(); break;? //Arrow right, expand child node????? case 40 : eval(Tname).nextNode();? break;? //Arrow down??? }? };} //瀏覽器類型及版本檢測MzTreeView.prototype.browserCheck = function(){? var ua = window.navigator.userAgent.toLowerCase(), bname;? if(/msie/i.test(ua))? {??? this.navigator = /opera/i.test(ua) ? "opera" : "";??? if(!this.navigator) this.navigator = "msie";? }? else if(/gecko/i.test(ua))? {??? var vendor = window.navigator.vendor.toLowerCase();??? if(vendor == "firefox") this.navigator = "firefox";??? else if(vendor == "netscape") this.navigator = "netscape";??? else if(vendor == "") this.navigator = "mozilla";? }? else this.navigator = "msie";? if(window.opera) this.wordLine = false;}; //給 TreeView 樹加上樣式設置MzTreeView.prototype.setStyle = function(){? /*??? width: 16px; /??? height: 16px; /??? width: 20px; /??? height: 20px; /? */? var style = "<style>"+? "DIV.MzTreeView DIV IMG{border: 0px solid #FFFFFF;}"+? "DIV.MzTreeView DIV SPAN IMG{border: 0px solid #FFFFFF;}";? if(this.wordLine)? {??? style +="/??? DIV.MzTreeView DIV/??? {/????? height: 20px;"+????? (this.navigator=="firefox" ? "line-height: 20px;" : "" ) +????? (this.navigator=="netscape" ? "" : "overflow: hidden;" ) +"/??? }/??? DIV.MzTreeView DIV SPAN/??? {/????? vertical-align: middle; font-size: 21px; height: 20px; color: #D4D0C8; cursor: default;/??? }/??? DIV.MzTreeView DIV SPAN.pm/??? {/????? width: "+ (this.navigator=="msie"||this.navigator=="opera" ? "11" : "9") +"px;/????? height: "+ (this.navigator=="netscape"?"9":(this.navigator=="firefox"?"10":"11")) +"px;/????? font-size: 7pt;/????? overflow: hidden;/????? margin-left: -16px;/????? margin-right: 5px;/????? color: #000080; /????? vertical-align: middle;/????? border: 1px solid #D4D0C8;/????? cursor: "+ (this.navigator=="msie" ? "hand" : "pointer") +";/????? padding: 0 2px 0 2px;/????? text-align: center;/????? background-color: #F0F0F0;/??? }";? }? style += "<//style>";? document.write(style);}; //當根節點為空的時候做的處理MzTreeView.prototype.atRootIsEmpty = function(){? var RCN = this.node["0"].childNodes;? for(var i=0; i<RCN.length; i++)? {??? if(!RCN[i].isLoad) this.expand(RCN[i].id);??? if (RCN[i].text=="")??? {????? var node = RCN[i].childNodes[0], HCN? = node.hasChild;????? if(this.wordLine)????? {??????? var span = this.getElementById(this.name +"_tree_"+ node.id);??????? span = span.childNodes[0].childNodes[0].childNodes[0];??????? span.innerHTML = RCN[i].childNodes.length>1 ? "┌" : "─";????? }????? else????? {??????? node.iconExpand? =? RCN[i].childNodes.length>1 ? HCN ? "PM0" : "L0" : HCN ? "PM3" : "L3"??????? this.getElementById(this.name +"_expand_"+ node.id).src = this.icons[node.iconExpand].src;????? }??? }? }}; //初始化數據源里的數據以便后面的快速檢索MzTreeView.prototype.dataFormat = function(){? var a = new Array();? for (var id in this.nodes) a[a.length] = id;? this.names = a.join(this._d + this._d);? this.totalNode = a.length; a = null;}; //在數據源檢索所需的數據節點//id? 客戶端節點對應的idMzTreeView.prototype.load = function(id){? var node = this.node[id], d = this.divider, _d = this._d;? var sid = node.sourceIndex.substr(node.sourceIndex.indexOf(d) + d.length);? var reg = new RegExp("(^|"+_d+")"+ sid +d+"[^"+_d+d +"]+("+_d+"|$)", "g");? var cns = this.names.match(reg), tcn = this.node[id].childNodes; if (cns){? reg = new RegExp(_d, "g"); for (var i=0; i<cns.length; i++)? tcn[tcn.length] = this.nodeInit(cns[i].replace(reg, ""), id); }? node.isLoad = true;}; //初始化節點信息, 根據 this.nodes 數據源生成節點的詳細信息//sourceIndex 數據源中的父子節點組合的字符串 0_1//parentId??? 當前樹節點在客戶端的父節點的 idMzTreeView.prototype.nodeInit = function(sourceIndex, parentId){? this.index++;? var source= this.nodes[sourceIndex], d = this.divider;? var text? = this.getAttribute(source, "text");? var hint? = this.getAttribute(source, "hint");? var sid?? = sourceIndex.substr(sourceIndex.indexOf(d) + d.length);? this.node[this.index] =? {??? "id"??? : this.index,??? "text"? : text,??? "hint"? : hint ? hint : text,??? "icon"? : this.getAttribute(source, "icon"),??? "path"? : this.node[parentId].path + d + this.index,??? "isLoad": false,??? "isExpand": false,??? "parentId": parentId,??? "parentNode": this.node[parentId],??? "sourceIndex" : sourceIndex,??? "childAppend" : ""? };???? this.nodes[sourceIndex] = "index:"+ this.index +";"+ source;???? this.node[this.index].hasChild = this.names.indexOf(this._d + sid + d)>-1;? if(this.node[this.index].hasChild)? this.node[this.index].childNodes = [];? return this.node[this.index];}; //從XML格式字符串里提取信息//source 數據源里的節點信息字符串(以后可以擴展對XML的支持)//name?? 要提取的屬性名MzTreeView.prototype.getAttribute = function(source, name){? var reg = new RegExp("(^|;|//s)"+ name +"//s*://s*([^;]*)(//s|;|$)", "i");? if (reg.test(source)) return RegExp.$2.replace(/[/x0f]/g, ";"); return "";}; //根據節點的詳細信息生成HTML//node?? 樹在客戶端的節點對象//AtEnd? 布爾值? 當前要轉換的這個節點是否為父節點的子節點集中的最后一項MzTreeView.prototype.nodeToHTML = function(node, AtEnd){? var source = this.nodes[node.sourceIndex];? var sourceArr=node.sourceIndex.split('_');? var target = this.getAttribute(source, "target");? var data = this.getAttribute(source, "data");? var url? = this.getAttribute(source, "url");? var cbm? = this.getAttribute(source, "cbm");? if(!cbm) cbm = '';? if(!url) url = this.url;? if(data) url += (url.indexOf("?")==-1?"?":"&") + data;? if(!target) target = this.target; ? var id?? = node.id;? var HCN? = node.hasChild, isRoot = node.parentId=="0";? if(isRoot && node.icon=="") node.icon = "root";? if(node.icon=="" || typeof(this.icons[node.icon])=="undefined")??? node.icon = HCN ? "folder" : "file";? node.iconExpand? = AtEnd ? "└" : "├"; ? var HTML = "<DIV noWrap='True'><NOBR>";? if(!isRoot)? {??? node.childAppend = node.parentNode.childAppend + (AtEnd ? " " : "│");??? if(this.wordLine)??? {????? HTML += "<SPAN>"+ node.parentNode.childAppend + (AtEnd ? "└" : "├") +"</SPAN>";????? if(HCN) HTML += "<SPAN class='pm' id='"+ this.name +"_expand_"+ id +"'>+</SPAN>";??? }??? else??? {????? node.iconExpand? = HCN ? AtEnd ? "PM2" : "PM1" : AtEnd ? "L2" : "L1";????? HTML += "<SPAN>"+ this.word2image(node.parentNode.childAppend) +"<IMG "+??????? "align='absmiddle' id='"+ this.name +"_expand_"+ id +"' "+??????? "src='"+ this.icons[node.iconExpand].src +"' style='cursor: "+ (!node.hasChild ? "":??????? (this.navigator=="msie"||this.navigator=="opera"? "hand" : "pointer")) +"'></SPAN>";??? }? }? HTML += "<IMG "+??? "align='absMiddle' "+??? "id='"+ this.name +"_icon_"+ id +"' "+??? "src='"+ this.icons[node.icon].src +"'>"? if(this.checkboxView){? HTML +="<input type=checkbox "+cbm+" id='cbm"+sourceArr[1]+"' οnclick='"+this.name+".selbox("+sourceArr[1]+")' parentId='cbm"+sourceArr[0]+"'>";? }? HTML += "<A class='MzTreeview' hideFocus "+??? "id='"+ this.name +"_link_"+ id +"' "+??? "href='"+ url +"' "+??? "target='"+ target +"' "+??? "title='"+ node.hint +"' "+??? "οnfοcus=/""+ this.name +".focusLink('"+ id +"')/" "+??? "οnclick=/"return "+ this.name +".nodeClick('"+ id +"')/">"+ node.text +? "</A></NOBR></DIV>";? if(isRoot && node.text=="") HTML = ""; ? HTML = "/r/n<SPAN id='"+ this.name +"_tree_"+ id +"'>"+ HTML ? HTML +="<SPAN style='DISPLAY: none'></SPAN></SPAN>";? return HTML;}; //在使用圖片的時候對 node.childAppend 的轉換MzTreeView.prototype.word2image = function(word){? var str = "";? for(var i=0; i<word.length; i++)? {??? var img = "";??? switch (word.charAt(i))??? {????? case "│" : img = "L4"; break;????? case "└" : img = "L2"; break;????? case " " : img = "empty"; break;????? case "├" : img = "L1"; break;????? case "─" : img = "L3"; break;????? case "┌" : img = "L0"; break;??? }??? if(img!="")????? str += "<IMG align='absMiddle' src='"+ this.icons[img].src +"' height='20'>";? }? return str;} //將某個節點下的所有子節點轉化成詳細的<HTML>元素表達//id 樹的客戶端節點 idMzTreeView.prototype.buildNode = function(id){? if(this.node[id].hasChild)? {??? var tcn = this.node[id].childNodes, str = "";??? for (var i=0; i<tcn.length; i++)????? str += this.nodeToHTML(tcn[i], i==tcn.length-1);??? var temp = this.getElementById(this.name +"_tree_"+ id).childNodes;??? temp[temp.length-1].innerHTML = str;? }}; //聚集到客戶端生成的某個節點上//id? 客戶端樹節點的idMzTreeView.prototype.focusClientNode????? = function(id){? if(!this.currentNode) this.currentNode=this.node["0"]; ? var a = this.getElementById(this.name +"_link_"+ id); if(a){ a.focus();? var link = this.getElementById(this.name +"_link_"+ this.currentNode.id);? if(link)with(link.style){color="";?? backgroundColor="";}? with(a.style){color = this.colors.highLightText;? backgroundColor = this.colors.highLight;}? this.currentNode= this.node[id];}}; //焦點聚集到樹里的節點鏈接時的處理//id 客戶端節點 idMzTreeView.prototype.focusLink= function(id){? if(this.currentNode && this.currentNode.id==id) return;? this.focusClientNode(id);}; //點擊展開樹節點的對應方法MzTreeView.prototype.expand?? = function(id, sureExpand){? var node? = this.node[id];? if (sureExpand && node.isExpand) return;? if (!node.hasChild) return;? var area? = this.getElementById(this.name +"_tree_"+ id);? if (area)?? area = area.childNodes[area.childNodes.length-1];? if (area)? {??? var icon? = this.icons[node.icon];??? var iconE = this.iconsExpand[node.icon];??? var Bool? = node.isExpand = sureExpand || area.style.display == "none";??? var img?? = this.getElementById(this.name +"_icon_"+ id);??? if (img)? img.src = !Bool ? icon.src :typeof(iconE)=="undefined" ? icon.src : iconE.src;??? var exp?? = this.icons[node.iconExpand];??? var expE? = this.iconsExpand[node.iconExpand];??? var expand= this.getElementById(this.name +"_expand_"+ id);??? if (expand)??? {????? if(this.wordLine) expand.innerHTML = !Bool ? "+"? : "-";????? else expand.src = !Bool ? exp.src : typeof(expE) =="undefined" ? exp.src? : expE.src;??? }??? if(!Bool && this.currentNode.path.indexOf(node.path)==0 && this.currentNode.id!=id)??? {????? try{this.getElementById(this.name +"_link_"+ id).click();}????? catch(e){this.focusClientNode(id);}??? }??? area.style.display = !Bool ? "none" : "block";//(this.navigator=="netscape" ? "block" : "");??? if(!node.isLoad)??? {????? this.load(id);????? if(node.id=="0") return; ????? //當子節點過多時, 給用戶一個正在加載的提示語句????? if(node.hasChild && node.childNodes.length>200)????? {??????? setTimeout(this.name +".buildNode('"+ id +"')", 1);??????? var temp = this.getElementById(this.name +"_tree_"+ id).childNodes;??????? temp[temp.length-1].innerHTML = "<DIV noWrap><NOBR><SPAN>"+ (this.wordLine ???????? node.childAppend +"└" : this.word2image(node.childAppend +"└")) +"</SPAN>"+??????? "<IMG border='0' height='16' align='absmiddle' src='"+this.icons["file"].src+"'>"+??????? "<A style='background-Color: "+ this.colors.highLight +"; color: "+??????? this.colors.highLightText +"; font-size: 9pt'>請稍候...</A></NOBR></DIV>";????? }????? else this.buildNode(id);??? }? }}; //節點鏈接單擊事件處理方法//id 客戶端樹節點的 idMzTreeView.prototype.nodeClick = function(id){? var source = this.nodes[this.node[id].sourceIndex];? eval(this.getAttribute(source, "method"));? return !(!this.getAttribute(source, "url") && this.url=="#");}; //為配合系統初始聚集某節點而寫的函數, 得到某節點在數據源里的路徑//sourceId 數據源里的節點 idMzTreeView.prototype.getPath= function(sourceId){? Array.prototype.indexOf = function(item)? {??? for(var i=0; i<this.length; i++)??? {????? if(this[i]==item) return i;??? }??? return -1;? };? var _d = this._d, d = this.divider;? var A = new Array(), id=sourceId; A[0] = id;? while(id!="0" && id!="")? {??? var str = "(^|"+_d+")([^"+_d+d+"]+"+d+ id +")("+_d+"|$)";??? if (new RegExp(str).test(this.names))??? {????? id = RegExp.$2.substring(0, RegExp.$2.indexOf(d));????? if(A.indexOf(id)>-1) break;????? A[A.length] = id;??? }??? else break;? }? return A.reverse();}; //在源代碼里指定 MzTreeView 初始聚集到某個節點//sourceId 節點在數據源里的 idMzTreeView.prototype.focus = function(sourceId, defer){? if (!defer)? {??? setTimeout(this.name +".focus('"+ sourceId +"', true)", 100);??? return;? }? var path = this.getPath(sourceId);? if(path[0]!="0")? {??? alert("節點 "+ sourceId +" 沒有正確的掛靠有效樹節點上!/r/n"+????? "節點 id 序列 = "+ path.join(this.divider));??? return;? }? var root = this.node["0"], len = path.length;? for(var i=1; i<len; i++)? {??? if(root.hasChild)??? {????? var sourceIndex= path[i-1] + this.divider + path[i];????? for (var k=0; k<root.childNodes.length; k++)????? {??????? if (root.childNodes[k].sourceIndex == sourceIndex)??????? {????????? root = root.childNodes[k];????????? if(i<len - 1) this.expand(root.id, true);????????? else this.focusClientNode(root.id);????????? break;??????? }????? }??? }? }}; //樹的單擊事件處理函數MzTreeView.prototype.clickHandle = function(e){? e = window.event || e; e = e.srcElement || e.target;? //alert(e.tagName)? switch(e.tagName)? {??? case "IMG" :????? if(e.id)????? {??????? if(e.id.indexOf(this.name +"_icon_")==0)????????? this.focusClientNode(e.id.substr(e.id.lastIndexOf("_") + 1));??????? else if (e.id.indexOf(this.name +"_expand_")==0)????????? this.expand(e.id.substr(e.id.lastIndexOf("_") + 1));????? }????? break;??? case "A" :????? if(e.id) this.focusClientNode(e.id.substr(e.id.lastIndexOf("_") + 1));????? break;??? case "SPAN" :????? if(e.className=="pm")??????? this.expand(e.id.substr(e.id.lastIndexOf("_") + 1));????? break;??? default :????? if(this.navigator=="netscape") e = e.parentNode;????? if(e.tagName=="SPAN" && e.className=="pm")??????? this.expand(e.id.substr(e.id.lastIndexOf("_") + 1));????? break;? }}; //MzTreeView 雙擊事件的處理函數MzTreeView.prototype.dblClickHandle = function(e){? e = window.event || e; e = e.srcElement || e.target;? if((e.tagName=="A" || e.tagName=="IMG")&& e.id)? {??? var id = e.id.substr(e.id.lastIndexOf("_") + 1);??? if(this.node[id].hasChild) this.expand(id);? }}; //回到樹當前節點的父層節點MzTreeView.prototype.upperNode = function(){? if(!this.currentNode) return;? if(this.currentNode.id=="0" || this.currentNode.parentId=="0") return;? if (this.currentNode.hasChild && this.currentNode.isExpand)??? this.expand(this.currentNode.id, false);? else this.focusClientNode(this.currentNode.parentId);}; //展開當前節點并MzTreeView.prototype.lowerNode = function(){? if (!this.currentNode) this.currentNode = this.node["0"];? if (this.currentNode.hasChild)? {??? if (this.currentNode.isExpand)????? this.focusClientNode(this.currentNode.childNodes[0].id);??? else this.expand(this.currentNode.id, true);? }} //聚集到樹當前節點的上一節點MzTreeView.prototype.pervNode = function(){? if(!this.currentNode) return; var e = this.currentNode;? if(e.id=="0") return; var a = this.node[e.parentId].childNodes;? for(var i=0; i<a.length; i++){if(a[i].id==e.id){if(i>0){e=a[i-1];? while(e.hasChild){this.expand(e.id, true);? e = e.childNodes[e.childNodes.length - 1];}? this.focusClientNode(e.id); return;} else {? this.focusClientNode(e.parentId); return;}}}}; //聚集到樹當前節點的下一節點MzTreeView.prototype.nextNode = function(){? var e = this.currentNode; if(!e) e = this.node["0"];? if (e.hasChild){this.expand(e.id, true);? this.focusClientNode(e.childNodes[0].id); return;}? while(typeof(e.parentId)!="undefined"){? var a = this.node[e.parentId].childNodes;? for(var i=0; i<a.length; i++){ if(a[i].id==e.id){? if(i<a.length-1){this.focusClientNode(a[i+1].id); return;}? else e = this.node[e.parentId];}}}}; //展開樹的所有節點MzTreeView.prototype.expandAll = function(){? if(this.totalNode>500) if(??? confirm("您是否要停止展開全部節點?/r/n/r/n節點過多!展開很耗時")) return;? if(this.node["0"].childNodes.length==0) return;? var e = this.node["0"].childNodes[0];? var isdo = t = false;? while(e.id != "0")? {??? var p = this.node[e.parentId].childNodes, pn = p.length;??? if(p[pn-1].id==e.id && (isdo || !e.hasChild)){e=this.node[e.parentId]; isdo = true;}??? else??? {????? if(e.hasChild && !isdo)????? {??????? this.expand(e.id, true), t = false;??????? for(var i=0; i<e.childNodes.length; i++)??????? {????????? if(e.childNodes[i].hasChild){e = e.childNodes[i]; t = true; break;}??????? }??????? if(!t) isdo = true;????? }????? else????? {??????? isdo = false;??????? for(var i=0; i<pn; i++)??????? {????????? if(p[i].id==e.id) {e = p[i+1]; break;}??????? }????? }??? }? }}; //本樹將要用動的圖片的字義及預載函數//path 圖片存放的路徑名MzTreeView.prototype.setIconPath? = function(path){? var k = 0, d = new Date().getTime();? for(var i in this.icons)? {??? var tmp = this.icons[i];??? this.icons[i] = new Image();??? this.icons[i].src = path + tmp;??? if(k==9 && (new Date().getTime()-d)>20)????? this.wordLine = true; k++;? }? for(var i in this.iconsExpand)? {??? var tmp = this.iconsExpand[i];??? this.iconsExpand[i]=new Image();??? this.iconsExpand[i].src = path + tmp;? }};//對話框單擊MzTreeView.prototype.selbox=function (id){var realId='cbm'+id;var obj=this.getElementById(realId); this.setDetail(obj);this.setParent(obj);}//設置父節點MzTreeView.prototype.setParent=function(obj){?parentObj=this.getElementById(obj.parentId);??if (!obj.checked)?{??var ob=document.getElementsByTagName('input');???for(var i=0;i<ob.length;i++){???obs=ob[i];???//alert(obs.parentId);???if (obs.type=='checkbox' && obs.parentId==parentObj.id && obs.checked)???{????return;???}??}?}?parentObj.checked=obj.checked;?if(parentObj.parentId!='0') this.setParent(parentObj);?}//設置字節點MzTreeView.prototype.setDetail=function(obj){??var ob=document.getElementsByTagName('input');??for(var i=0;i<ob.length;i++){??obs=ob[i];??//alert(obs.parentId);??if (obs.type=='checkbox' && obs.parentId==obj.id)??{???obs.checked=obj.checked;???this.setDetail(obs);??}?}}//設置某一節點MzTreeView.prototype.setBox=function(id,bl){?if(this.checkboxView==false) return;?var realId='cbm'+id;?var obj=this.getElementById(realId);?obj.checked=bl;}//獲取所有已選節點idMzTreeView.prototype.getAllBox=function(){?var myArray=new Array();?var ob=document.getElementsByTagName('input');?for(var i=0;i<ob.length;i++){??obs=ob[i];??//alert(obs.parentId);??if (obs.type=='checkbox' && obs.checked)??{???myArray.push(obs.id.substring(3));??}?}?return myArray;} //設置樹的默認鏈接//url 默認鏈接? 若不設置, 其初始值為 #MzTreeView.prototype.setURL???? = function(url){this.url = url;}; //設置樹的默認的目標框架名 target//target 目標框架名? 若不設置, 其初始值為 _selfMzTreeView.prototype.setTarget? = function(target){this.target = target;};// -->
總結
- 上一篇: 提高企业WiFi速度的快速简便的方法—V
- 下一篇: python滑动窗口求回归——OLS和W