用jquery類比select實現下拉樹形菜單。

來源:互聯網
上載者:User

之前隨便寫寫,發現需要的人挺多,抽了點時間寫了個完整的已上次到資源。  http://download.csdn.net/source/3461323

首先感謝http://www.codesky.net/article/doc/200810/200810166672871.htm 的作者。控制項原理就請到原文去看了。

網上找了一下。etx也有類似的控制項,無奈它的類庫實在是不小,就自己封裝了一個。

HTML代碼

<head>

<!--jquery jsTree控制項-->

 <link rel="stylesheet" type="text/css" href="${ctx}/js/jstree/tree_component.css" />
 <script type="text/javascript" src="${ctx}/js/jstree/css.js"></script>
 <script type="text/javascript" src="${ctx}/js/jstree/tree_component.min.js"></script>

 <script src="${ctx}/js/jquery.js"type="text/javascript"></script>

 

<script type="text/javascript">
jQuery(document).ready(function(){

    initSelect("departmentId","terminal-planning!loadTree.action");// 這裡後面一個url是jstree 獲得json的後台。

}

 

//用DIV類比出樹形select
function Offset(e)
{
//取標籤的絕對位置
 var t = e.offsetTop;
 var l = e.offsetLeft;
 var w = e.offsetWidth;
 var h = e.offsetHeight-2;
 while(e=e.offsetParent)
 {
  t+=e.offsetTop;
  l+=e.offsetLeft;
 }
 return {
  top : t,
  left : l,
  width : w,
  height : h
 }
}
function initSelect(obj,url){
//取得select標籤的位置。obj:頁面上被替代的select id.url:jsTree 獲得json後台
 var $selectObj = $("#"+obj);
 var offset=Offset($selectObj.get(0)); //取得Select所在的位置
 $selectObj.css("display","none");//隱藏原來的select
 var $iDiv = $("<div id='selectof"+obj+"'></div>");//類比一個div替代select
 $iDiv.css("position","absolute");
 $iDiv.css("top",offset.top+"px");
 $iDiv.css("left",offset.left+"px");
 $iDiv.css("width",offset.width+"px");
 $iDiv.css("height",offset.height+"px");
 $iDiv.css("background","url(images/icon_select.gif) no-repeat right 4px");
 $iDiv.css("border","1px solid #3366ff");
 $iDiv.css("fontSize","12px");
 $iDiv.css("lineHeight",offset.height+"px");
 $iDiv.css("textIndent","4px");
 $("body").append($iDiv);
 //滑鼠事件
 $iDiv.get(0).onmouseover=function(){//滑鼠移到
  $iDiv.css("background","url(images/icon_select_focus.gif) no-repeat right 4px");
  }
 $iDiv.get(0).onmouseout=function(){//滑鼠移走
  $iDiv.css("background","url(images/icon_select.gif) no-repeat right 4px");
  }
 $iDiv.click(function(){
  if($("#selectchild"+obj).length==1){
   //判斷是否建立過彈出層div
   if(($("#selectchild"+obj+":hidden").length==1)){
    //開啟
    $("#selectchild"+obj).css("display","block");
   }else{
    //隱藏
    $("#selectchild"+obj).css("display","none");
   }
  }else{
   //初始一個div放在上一個div下邊,當options的替身。
   var $cDiv = $("<div id='selectchild"+obj+"'></div>");
   $cDiv.css("position","absolute");
   $cDiv.css("top",offset.top+offset.height+2+"px");
   $cDiv.css("left",offset.left+"px");
   $cDiv.css("width",offset.width+"px");
   $cDiv.css("background","#f7f7f7");
   $cDiv.css("border","1px solid silver");
   $deptDiv = $("<div></div>")
   //產生jsTree
   conf={data:{
    type:"json",     
    url:url
    },
    callback:{
      onchange    : function(node) {
      $iDiv.text($("#"+node.id+">a:eq(0)").text());
      //將選中的ID寫進原來的select
      $Option = $("<option value="+node.id+"selected='true'></option>");
      $("#"+obj).append($Option);
      $cDiv.css("display","none");
     }
    }   
   };
   var treeFunc = $.tree_create();
   treeFunc.init($deptDiv, $.extend({},conf));
   $cDiv.append($deptDiv);
   $("body").append($cDiv);
  }
 })
}

</script>
</head>
<body>

<table>
   <tr>
    <td>
     <select id="departmentId" name="departmentId" style="width:200px"></select>
    </td>
   </tr> 
  </table> 

</body>

 

 就這麼簡單,不過先要會用jstree.

 效果看圖(截得很爛),可相容支援其他樹哦。

 

 

展開節點的樣子

單擊選中收合

 之前隨便寫寫,發現需要的人挺多,抽了點時間寫了個完整的已上次到資源。  http://download.csdn.net/source/3461323
   

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.