2012/11/8 17:23:31作者:佚名來源:網(wǎng)絡(luò)
【實例名稱】
Javascript實現(xiàn)文檔結(jié)構(gòu)圖
【實例描述】
組織結(jié)構(gòu)圖是word中經(jīng)常遇到的圖片結(jié)構(gòu)。本例將學習如何利用JaVascript代碼實現(xiàn)一個類似的組織結(jié)構(gòu)圖。
【實例代碼】
<html> <head> <title>組織結(jié)構(gòu)圖-學無憂(yzddtk.cn)</title> <style> .ItemCss { position:absolute; width:24px; border:1px solid #999999; font-size:12px; padding:5px; height:70px; z-index:9; background-color:#FFFFFF; line-height:16px; } a { text-decoration:none; color:#333333; } .divhline { position:absolute; z-index:17; padding:0px; margin:0px; border-top:1px solid #999999; } .divvline { color:blue; position:absolute; background-color:#999999; width:1px; z-index:17; } </style> <script language="javascript"> var dItem = new Array(); var w = 600; var h = 40; var iw = 60; var ih = 70; var boxh = 70; var startleft = 350; var starttop = 30; var hr = "<hr size=\"1\" noshade>" var labledv = "<div class=\"ItemCss\" style=\"" var hdv = "<div class=\"divhline\" style=\"width:"; var vdv = "<div class=\"divvline\" style=\"height:" + h + "px;\""; var endsdv = "\">"; var enddv = "</div>"; var htm = ""; var len; var maxn=0; //深度初始變量 function createStruct() { dItem[0] = "1|教育部|0|"; //設(shè)置要顯示的結(jié)構(gòu)內(nèi)容-以“|”間隔 dItem[1] = "2|東部教育局|1|"; //注意第三項為父級節(jié)點 dItem[2] = "3|西部教育局|1|"; dItem[3] = "4|東部高校|2|"; dItem[4] = "5|東部高中|2|"; dItem[5] = "6|商務(wù)代表|5|"; dItem[6] = "7|東部初中|2|"; dItem[7] = "8|西部高校|3|"; dItem[8] = "9|西部高中|3|"; len = dItem.length; //獲取結(jié)構(gòu)數(shù)組的長度 Set_Item(0,0); //設(shè)置開始的節(jié)點 Set_Max(); Write_Item(0,0,0,1); var htm1 = ""; for(var i=0;i<len;i++) { htm1 = htm1 +dItem[i]+"<br>"; } document.getElementById("divStruct").innerHTML = htm; }
function Set_Item(pid,ni) //設(shè)置節(jié)點層次 { var n = ni + 1; //子節(jié)點的序號 var iAry = new Array(); for(var i=0;i<len;i++) { iAry = dItem[i].split("|"); //分解數(shù)組中的當前節(jié)點 if(iAry[2] == pid) //是當前節(jié)點的子節(jié)點 { dItem[i] = dItem[i] + ni; //當前節(jié)點中添加一項 if(maxn < ni) //改變結(jié)構(gòu)的深度 { maxn = ni; } Set_Item(iAry[0],n); //循環(huán)設(shè)置層次 } } }
function Set_Max() //設(shè)置節(jié)點子節(jié)點中最大數(shù) { var iAry = new Array(); var childnum; for(var i=0;i<len;i++) { iAry = dItem[i].split("|"); //分解數(shù)組中的當前節(jié)點 childnum = Get_Child_Num(iAry[0]); //獲取當前節(jié)點的子節(jié)點 if(childnum <= 1) //如果子節(jié)點數(shù)為0或1 { dItem[i] = dItem[i] + "|0"; //當前節(jié)點中添加一項 } else { dItem[i] = dItem[i] + "|" + Get_Max(iAry[0],iAry[3]); //獲取最大節(jié)點 } } } function Get_Max(pid,start) //獲取指定節(jié)點的最大節(jié)點 { var iAry = new Array(); var m = 0; var n = 0; for(var j=start;j<=maxn;j++) { for(var i=0;i<len;i++) { iAry = dItem[i].split("|"); if(iAry[3] == j) { if(Get_RootID(pid,iAry[0])) //獲取當前節(jié)點的根節(jié)點 { m = m + 1; } } if(n < m) { n = m; } } m = 0; } return n; } function Get_RootID(pid,id) //獲取當前節(jié)點的根節(jié)點 { var iAry = new Array(); for(var i=0;i<len;i++) { iAry = dItem[i].split("|"); //分解當前節(jié)點 if(iAry[0] == id) { if(iAry[2] == pid) { return true; break; } else { return Get_RootID(pid,iAry[2]); //返回根節(jié)點 } } } return false; }
function Get_Item(id) //取得指定節(jié)點號所在的數(shù)組 { var i; var items; var iAry = new Array(); for(i=0;i<len;i++) //邊界節(jié)點組 { iAry = dItem[i].split("|"); //分解當前節(jié)點 if(iAry[0] == id) { items = dItem[i]; //獲取節(jié)點 break; } } return items; }
function Get_Child_Num(pid) //根據(jù)父節(jié)點取得子節(jié)點個數(shù) { var i; var rnum = 0; var iAry = new Array(); for(i=0;i<len;i++) //遍歷組織結(jié)構(gòu)數(shù)組 { iAry = dItem[i].split("|"); //將每一項再分離出數(shù)據(jù) if(iAry[2] == pid) //第三項便是父節(jié)點 { rnum = rnum + 1; //是當前節(jié)點的子節(jié)點 } } return rnum; }
function Write_Item(ipid,ltmp,wtmp,cnt) { var iAry = new Array(); var id; var txt; var pid; var lens; var maxnum; var t; var l; var hline_width; var dvline = ""; var childnum = 0; var itxt; var tmpcnt = 0; for(var i=0;i<len;i++) { itxt = dItem[i]; iAry = itxt.split("|"); //分解節(jié)點項 if(iAry[2] == ipid) { id = iAry[0]; txt = "<a href=\"?id=" + id + "\">" + iAry[1] + "</a>"; //動態(tài)創(chuàng)建鏈接,鏈接內(nèi)容來自節(jié)點數(shù)據(jù) pid = iAry[2]; lens = iAry[3]; maxnum = iAry[4]; childnum = Get_Child_Num(id); hline_width = maxnum * iw; if(pid == 0) { t = starttop; l = startleft; } else { t = starttop + 2 * lens * h + lens * ih; l = ltmp - wtmp/2 + (wtmp / 2) * tmpcnt; } dvline = ""; if(childnum > 1) { var t1; var l1; var t2; var l2; var w2; t1 = t + ih; l1 = l + 12; w2 = hline_width/2; t2 = t1 + h; l2 = l - w2 + 10; //使用div實現(xiàn)邊框效果 dvline = "<div class=\"divvline\" style=\"height:" + h + "px;left:" + l1 +"px;top:" + t1 + "\"></div>"; dvline = dvline + "<div class=\"divhline\" style=\"width:" + hline_width + "px;left:" + l2 +"px;top:" + t2 + "\"></div>"; for(var j=0;j<childnum;j++) { var t3; var l3; t3 = t1 + h; l3 = l2 + (hline_width/(childnum-1)) * j; var tmpline = "<div class=\"divvline\" style=\"height:" + h + "px;left:" + l3 +"px;top:" + t3 + "\"></div>"; dvline = dvline + tmpline; } dvline = dvline } else if(childnum == 1) { var t4; var l4; l4 = l + 12;//使用div實現(xiàn)邊框效果 dvline = "<div class=\"divvline\" style=\"height:" + h + "px;left:" + l4 +"px;top:" + (t + ih) + "\"></div>"; dvline = dvline + "<div class=\"divvline\" style=\"height:" + h + "px;left:" + l4 +"px;top:" + (t + ih + h) + "\"></div>"; } htm = htm + labledv + "left:" + l + "px;top:" + t + "px" + endsdv + txt + enddv + dvline; if(cnt % 2 == 0) { tmpcnt = tmpcnt + 2; } else { tmpcnt = tmpcnt + 1; } Write_Item(id,l,hline_width,childnum);//循環(huán)輸出 } } } </script> </head> <body onLoad="createStruct()"> <div id="divStruct"></div> </body> </html>
【運行效果】
【難點剖析】
組織結(jié)構(gòu)圖的難點是如何實現(xiàn)一種組織結(jié)構(gòu)形式。本例中將這些結(jié)構(gòu)數(shù)據(jù)保存在數(shù)組中,同時設(shè)置數(shù)組中的每項又包含3個數(shù)據(jù):當前節(jié)點序號、節(jié)點文本和當前節(jié)點的父節(jié)點:在數(shù)據(jù)處理時,使用字符串對象的“Split”方法分解這些數(shù)據(jù),并進行節(jié)點判斷。
【源碼下載】
為了JS代碼的準確性,請點擊:Javascript實現(xiàn)文檔結(jié)構(gòu)圖 進行本實例源碼下載
標簽: Javascript 圖片 結(jié)構(gòu)圖
相關(guān)文章
金山數(shù)據(jù)恢復大師官方版 v1.0.0.2
詳情南方測繪Cass10v10.1.6中文
詳情revit 2017
詳情KeyShot Pro 9中文(附安裝教程) v9.0.286
詳情網(wǎng)易新聞客戶端v105.3
詳情AIMP4v5.11.2421中文綠色美化版
詳情onekey一鍵還原v18.0.18.1008
詳情浩辰CAD2020綠色v20.0
詳情好圖網(wǎng)圖標轉(zhuǎn)換工具v4.9.7
詳情Adobe indesign cs6
詳情aardiov35.0.0中文最新版
詳情Adobe Creative Cloud 2024簡體中文v5.3.0.48
詳情暴風影音16 v9.04.1029去廣告精簡版
詳情ASP.NET Maker 2019(ASP.NET代碼生成工具)v12.0.4.0
詳情暴風影音v5.92.0824.1111
詳情迅雷5穩(wěn)定版v5.8.14.706
詳情使命召喚17官方中文版 v1.0
詳情死亡之雨新的僵尸病毒中文v1.0綠色免安裝版
詳情輻射4v1.7.15.0整合版
詳情克莉2v1.0中文版
詳情冬日計劃v1.2中文版
詳情刺客信條英靈殿v1.0吾愛
詳情刺客信條英靈殿終極v1.0免安裝
詳情動物森友會v1.10.0最新
詳情哈迪斯殺出地獄v1.37中文
詳情嗜血印中文豪華版v1.0豪華版 附游戲攻略秘籍
詳情城市戰(zhàn)斗v1.0中文
詳情尼爾人工生命v1.0steam免費
詳情尼爾人工生命升級版v1.0PC
詳情層層恐懼2中文v1.0綠色免安裝版
詳情往日不再v1.0 steam
詳情往日不再v1.0pc
詳情小生活游戲內(nèi)置MOD版v2.0(57)安卓版
詳情使命召喚手游測試服最新版v1.9.41安卓版
詳情三國謀定天下官服v1.2.1安卓版
詳情熱血新手村高爆版v1.0.0安卓版
詳情我養(yǎng)你啊手機版v1.0.0安卓版
詳情看懂了就很恐怖的故事(細思極恐)中文版v1.0安卓版
詳情背包英雄中文手機版v1.1.1安卓版
詳情glow官方版v2.0.9安卓版
詳情三國大時代4霸王立志官方正版v1.9安卓版
詳情飛盧小說閱讀器手機版v7.0.7安卓版
詳情牛?;浾Z詞典軟件v20.4.4安卓版
詳情PrettyUp視頻美化瘦身軟件v2.3.0
詳情化學方程式app中文版v1.1.0.20安卓版
詳情地下城堡3魂之詩2024安卓最新版v1.2.3安卓版
詳情南方都市報v6.10.0安卓版
詳情阿修羅之眼正版v1.0.10安卓版
詳情