之前隨便寫寫,發現需要的人挺多,抽了點時間寫了個完整的已上次到資源。 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