ammayjxf

           

          dtree動態(tài)樹

          dtree動態(tài)樹+Javascript右鍵菜單(一)
          注:先看效果,不行了你就不用看,免得浪費(fèi)大家的時間。行了你再看。

          0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0>

          1、從網(wǎng)上下載dtree控件。下面是dtree的下載地址http://destroydrop.com/javascripts/tree/
          2、解壓縮dtree.rar包。
              把dtree目錄下的dtree.js 拷貝至scripts文件中、
              dtree.css  拷貝至styles文件中、
              img文件和example01.html拷貝至工程根目錄下。
              注意:除了api.html之外,其它的文件都是必須拷貝的。只有這個api.html是對dtree控件的函數(shù)介紹。
          3、將example01.html文件重命名為Tree.jsp

          4、在Web應(yīng)用中指定首頁為Tree.jsp頁面。
          5、Tree.jsp中的代碼如下:
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          <html>
          <head>
          <title>Destroydrop &raquo; Javascripts &raquo; Tree</title>
          <link rel="StyleSheet" href="styles/dtree.css" type="text/css" />
          <script type="text/javascript" src="scripts/dtree.js"></script>
          </head>
          <body>
          <div class="dtree">
          <p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
          <script type="text/javascript">
          <!--
          d = new dTree('d');

          d.add(0,-1,'后臺管理');

          d.add(1,0,'welcom','wel','權(quán)限管理');

          d.add(2,1,'welcom','wel','<a href=javascript:clickMenu(); oncontextmenu=showMenu("a8a0d9175219a593801219a5efbff0002")>用戶管理</a>');

          d.add(3,2,'welcom','wel','<a href=javascript:clickMenu(); oncontextmenu=showMenu("8a0d9156219a71a201219a73422e0001")>角色管理</a>');

          d.add(4,2,'welcom','wel','<a href=javascript:clickMenu(); oncontextmenu=showMenu("8a0d9156219a5a9901219a61df120003")>功能管理</a>');

          d.add(5,2,'welcom','wel','<a href=javascript:clickMenu(); oncontextmenu=showMenu("8a0d9156219a5a9901219a5d62f00002")>用戶角色分配</a>');

          d.add(6,2,'welcom','wel','<a href=javascript:clickMenu(); oncontextmenu=showMenu("8a0d9156219a5a9901219a5ce5730001")>角色功能分配</a>');

          document.write(d);
          //-->
          </script>
          </div>
          </body>
          </html>

          6、注意以下的代碼,這才是真正為樹添加節(jié)點(diǎn)的部分。
              d.add(0,-1,'My example tree');
              這一句為樹添加了一個根節(jié)點(diǎn),顯示名稱為'My example tree'
              d.add(1,0,'Node 1','example01.html');
          這一句在樹的根節(jié)點(diǎn)下面添加了一個子節(jié)點(diǎn)。(d.add()方法的參數(shù)具體含義可參見api.html文件)
              常用的:
              第一個參數(shù),表示當(dāng)前節(jié)點(diǎn)的ID
              第二個參數(shù),表示當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)的ID
              第三個參數(shù),節(jié)點(diǎn)要顯示的文字
              第四個參數(shù),點(diǎn)擊該節(jié)點(diǎn)的超鏈接(注意也可以是某個servlet或是struts應(yīng)用中的某個.do請求)
              第五個參數(shù),鼠標(biāo)移至該節(jié)點(diǎn)時顯示的文字
              第六個參數(shù),指定點(diǎn)擊該節(jié)點(diǎn)時在哪個楨中打開超鏈接
              ……
          6、運(yùn)行應(yīng)用程序。可以看到一棵漂亮的樹。
          注:如果你要修改樹形圖片,可以到scripts/dtree.js文件中修改從44行到57行圖片路徑。


          dtree動態(tài)樹+Javascript右鍵菜單(二)(實(shí)現(xiàn)動態(tài)樹):
          以下是從數(shù)據(jù)庫中取出數(shù)據(jù)動態(tài)生成樹的方法:

          1、首先需要建數(shù)據(jù)表,命名為TreeInfo。
              可以參照dtree目錄下的api.html文件中介紹的各個參數(shù),來創(chuàng)建數(shù)據(jù)表
              比如我的TreeInfo中包含如下字段:
          CREATE TABLE TreeInfo (
              nodeid               number(10,0),
              parentid             number(10,0),
              caption              varchar(200),
              nodeurl              varchar(200),
              target               varchar(200),
              tipinfo               varchar(200),
              icon                  varchar(200),
              iconopen            varchar(200),
              isopen               number(10,0))
              //注:parentid我用的是自身關(guān)聯(lián)nodeid
          2、在數(shù)據(jù)庫中創(chuàng)建這樣的表
              寫入幾條數(shù)據(jù):
          insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (1,0,'權(quán)限管理','jsp1.jsp','mainFrame');
          insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (2,1,'用戶管理','user.jsp','mainFrame');
          insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (3,2,'角色管理','role.jsp','mainFrame');
          insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (4,2,'功能管理','function.jsp','mainFrame');
          insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (5,2,'用戶角色分配','user_role.jsp','mainFrame');
          insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (6,2,'角色功能分配','role_func.jsp','mainFrame');
          3、寫一個類,把TreeInfo表中的數(shù)據(jù)取出來封裝在一個TreeInfoVO類中。(該類為一個數(shù)據(jù)Bean),多條記錄封裝在一個ArrayList中。
          3、寫一個Action類:
          public ActionForward tree(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {


          TreeInfo treeInfo = new TreeInfo();
          //這里只是取得TreeInfo表中所有數(shù)據(jù),你可以根據(jù)自己的應(yīng)用來取值
          List<TreeInfo> treeList = treeInfoService.getTreeInfo();
          /*****將取得的記錄依次添加到StringBuffer中,然后返回str字符串************/
          StringBuffer sb = new StringBuffer();
          String str = null;
          String parid = null;
          sb.append("0,-1,''@");
          for(Iterator iter = treeList.iterator();iter.hasNext();){
          TreeInfo tree = (TreeInfo)iter.next();

          str = tree.getNodeid()+","+tree.getParentid()+",'"+tree.getCaption()+"',"+tree.getNodeurl()+",'"+tree.getTarget()+"'@";
          sb.append(str);
          }
          request.setAttribute("str", sb.toString());
          //注意:str是tree.jsp中的request.getAttribute("str");
          System.out.println("打印樹節(jié)點(diǎn):"+sb.toString());
          /************************************************************************/

          return mapping.findForward("projectShow");
          }
          4、修改Tree.jsp頁面
          修改其中生成樹的javascript代碼:
              <div class="dtree">
          <script type="text/javascript">
          <!--
          d = new dTree('d');
          <%
          String str = (String)request.getAttribute("str");
          String[] ar =  str.split("@");
          for(int i=0;i<ar.length;i++){
          %>
          d.add(<%=ar[i]%>);
          <%}%>
          document.write(d);
          //-->
          </script>
          </div>

          5、重新運(yùn)行應(yīng)用程序,動態(tài)樹顯示出來。

          dtree動態(tài)樹+Javascript右鍵菜單(三)
          以下是實(shí)現(xiàn)Javascript的右鍵菜單的功能。

          解決:
          1、對頁面定義一個div,div中設(shè)置一個表格,表格中的各行即右鍵菜單的各個菜單項(xiàng),比如“新增”、“刪除”、“修改”等。
          2、定義頁面的右鍵彈出事件的javascript函數(shù),在函數(shù)中設(shè)置body.innerHTML為該div的innerHTML,以此顯示右鍵菜單。
          3、對于頁面的不同對象,設(shè)置不同的控制字符串,比如“101”,此字符串作為彈出事件javascript函數(shù)的參數(shù),
          在該函數(shù)中解析該字符串,動態(tài)控制div中表格不同行的顯示與否。比如對于“101”,則顯示“新增”和“修改”這兩個菜單項(xiàng)。

          下面是具體實(shí)現(xiàn)步驟:
          1、在<body>中:<body oncontextmenu=showMenu('')>
          2、添加<form>:
          <form name = "menuForm">
               <!--隱藏框,用來保存選擇的菜單的id值-->
               <input type = "hidden" name = "id" value = "">
              <table><tr><td>
              <div class="dtree">
          <script type="text/javascript">
          <!--
          d = new dTree('d');
          <%
          String str = (String)request.getAttribute("str");
          String[] ar =  str.split("@");
          for(int i=0;i<ar.length;i++){
          %>
          d.add(<%=ar[i]%>);
          <%}%>
          document.write(d);
          //-->
          </script>
          </div>
              </td></tr></table>
            </form>
          3、首先修改Tree.jsp頁面
          在該頁面的</body>  和  </html>之間添加如下html代碼:
          <!-- 右鍵開始 -->
          <div id="itemMenu" style="display:none">
            <table border="1" width="100%" bgcolor="#D0D0D0" style="border:thin" cellspacing="0">
              <tr>
                <td style="cursor:hand;border:outset 1;font-size:12px" align="left" onclick="parent.addNode()">新增</td>
              </tr>

              <tr>
                <td style="cursor:hand;border:outset 1;font-size:12px" align="left" onclick="parent.delNode()">刪除</td>
              </tr>

              <tr>
                <td style="cursor:hand;border:outset 1;font-size:12px" align="left" onclick="parent.updateNode()">更新</td>
              </tr>
            </table>
          </div>
          <!-- 右鍵結(jié)束 -->

          到這里就定義了右鍵菜單中有三項(xiàng):新增、刪除、更新

          4、定義頁面的右鍵彈出事件的javascript函數(shù)
          <script language="JavaScript">
          /**
          *根據(jù)傳入的id顯示右鍵菜單
          */
          function showMenu(id)
          {
              menuForm.id.value = id;
              if("" == id)
              {
                  popMenu(itemMenu,100,"1000");
              }
              else
              {
                  popMenu(itemMenu,100,"1111");
              }
                  event.returnValue=false;
                  event.cancelBubble=true;
                  return false;
          }
          /**
          *顯示彈出菜單
          *menuDiv:右鍵菜單的內(nèi)容
          *width:行顯示的寬度
          *rowControlString:行控制字符串,0表示不顯示,1表示顯示,如“101”,則表示第1、3行顯示,第2行不顯示
          */
          function popMenu(menuDiv,width,rowControlString)
          {
              //創(chuàng)建彈出菜單
              var pop=window.createPopup();
              //設(shè)置彈出菜單的內(nèi)容
              pop.document.body.innerHTML=menuDiv.innerHTML;
              var rowObjs=pop.document.body.all[0].rows;
              //獲得彈出菜單的行數(shù)
              var rowCount=rowObjs.length;
              //循環(huán)設(shè)置每行的屬性
              for(var i=0;i<rowObjs.length;i++)
              {
                  //如果設(shè)置該行不顯示,則行數(shù)減一
                  var hide=rowControlString.charAt(i)!='1';
                  if(hide){
                      rowCount--;
                  }
                  //設(shè)置是否顯示該行
                  rowObjs[i].style.display=(hide)?"none":"";
                  //設(shè)置鼠標(biāo)滑入該行時的效果
                  rowObjs[i].cells[0].onmouseover=function()
                  {
                      this.style.background="#aec3de";
                      this.style.color="red";
                  }
                  //設(shè)置鼠標(biāo)滑出該行時的效果
                  rowObjs[i].cells[0].onmouseout=function(){
                      this.style.background="#5cb4dd";
                      this.style.color="#000000";
                  }
              }
              //屏蔽菜單的菜單
              pop.document.oncontextmenu=function()
              {
                      return false;
              }
              //選擇右鍵菜單的一項(xiàng)后,菜單隱藏
              pop.document.onclick=function()
              {
                      pop.hide();
              }
              //顯示菜單
              pop.show(event.clientX-1,event.clientY,width,rowCount*25,document.body);
              return true;
          }
          function create()
          {
              alert("create" + menuForm.id.value + "!");
          }
          function update()
          {
              alert("update" + menuForm.id.value + "!");
          }
          function del()
          {
              alert("delete" + menuForm.id.value + "!");
          }
          function select()
          {
              alert("select" + menuForm.id.value + "!");
          }
          function clickMenu()
          {
              alert("you click a menu!");
          }
          </script>

          /*-----------------------------------------*/
          注:由于時間問題,本

          posted on 2009-10-28 22:48 ammay 閱讀(2346) 評論(1)  編輯  收藏

          評論

          # re: dtree動態(tài)樹[未登錄] 2012-05-15 14:58 燕子

          可以給模板么?謝謝 郵箱 520038197@qq.com  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安陆市| 普格县| 综艺| 建昌县| 三江| 襄樊市| 军事| 汾西县| 乐陵市| 茶陵县| 大洼县| 永年县| 东宁县| 彰武县| 于田县| 囊谦县| 南江县| 舞钢市| 长子县| 名山县| 星子县| 城步| 肇庆市| 喀喇沁旗| 黔南| 铜梁县| 苗栗市| 清丰县| 定州市| 新津县| 鄂伦春自治旗| 军事| 商河县| 康定县| 瓮安县| 洱源县| 游戏| 景泰县| 汾阳市| 山东| 曲阳县|