ammayjxf

           

          dtree動態樹

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

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

          1、從網上下載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控件的函數介紹。
          3、將example01.html文件重命名為Tree.jsp

          4、在Web應用中指定首頁為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','權限管理');

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


          dtree動態樹+Javascript右鍵菜單(二)(實現動態樹):
          以下是從數據庫中取出數據動態生成樹的方法:

          1、首先需要建數據表,命名為TreeInfo。
              可以參照dtree目錄下的api.html文件中介紹的各個參數,來創建數據表
              比如我的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我用的是自身關聯nodeid
          2、在數據庫中創建這樣的表
              寫入幾條數據:
          insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (1,0,'權限管理','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表中的數據取出來封裝在一個TreeInfoVO類中。(該類為一個數據Bean),多條記錄封裝在一個ArrayList中。
          3、寫一個Action類:
          public ActionForward tree(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {


          TreeInfo treeInfo = new TreeInfo();
          //這里只是取得TreeInfo表中所有數據,你可以根據自己的應用來取值
          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("打印樹節點:"+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、重新運行應用程序,動態樹顯示出來。

          dtree動態樹+Javascript右鍵菜單(三)
          以下是實現Javascript的右鍵菜單的功能。

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

          下面是具體實現步驟:
          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>
          <!-- 右鍵結束 -->

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

          4、定義頁面的右鍵彈出事件的javascript函數
          <script language="JavaScript">
          /**
          *根據傳入的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:右鍵菜單的內容
          *width:行顯示的寬度
          *rowControlString:行控制字符串,0表示不顯示,1表示顯示,如“101”,則表示第1、3行顯示,第2行不顯示
          */
          function popMenu(menuDiv,width,rowControlString)
          {
              //創建彈出菜單
              var pop=window.createPopup();
              //設置彈出菜單的內容
              pop.document.body.innerHTML=menuDiv.innerHTML;
              var rowObjs=pop.document.body.all[0].rows;
              //獲得彈出菜單的行數
              var rowCount=rowObjs.length;
              //循環設置每行的屬性
              for(var i=0;i<rowObjs.length;i++)
              {
                  //如果設置該行不顯示,則行數減一
                  var hide=rowControlString.charAt(i)!='1';
                  if(hide){
                      rowCount--;
                  }
                  //設置是否顯示該行
                  rowObjs[i].style.display=(hide)?"none":"";
                  //設置鼠標滑入該行時的效果
                  rowObjs[i].cells[0].onmouseover=function()
                  {
                      this.style.background="#aec3de";
                      this.style.color="red";
                  }
                  //設置鼠標滑出該行時的效果
                  rowObjs[i].cells[0].onmouseout=function(){
                      this.style.background="#5cb4dd";
                      this.style.color="#000000";
                  }
              }
              //屏蔽菜單的菜單
              pop.document.oncontextmenu=function()
              {
                      return false;
              }
              //選擇右鍵菜單的一項后,菜單隱藏
              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 閱讀(2347) 評論(1)  編輯  收藏

          評論

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

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


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 迁安市| 海门市| 特克斯县| 阳信县| 金堂县| 凤凰县| 常州市| 康定县| 大名县| 南溪县| 河曲县| 江门市| 墨竹工卡县| 东方市| 静宁县| 天台县| 西平县| 思茅市| 嘉义市| 建水县| 清镇市| 隆昌县| 元谋县| 丹寨县| 平江县| 临安市| 宣武区| 大化| 游戏| 盐亭县| 广昌县| 沈阳市| 潼南县| 云梦县| 尤溪县| 湖北省| 宽城| 濉溪县| 天峨县| 杭锦后旗| 吉安市|