DEMO:http://www.dhtmlx.com/docs/products/dhtmlxTree/samples/
API:http://docs.dhtmlx.com/doku.php?id=dhtmlxtree:api_toc_alphajavascript
http://dhtmlx.com/docs/products/dhtmlxTree/php
先來張demo圖html
<div id="index_tree" style="height: 100%; width: 100%; overflow: auto; display: block;" oncontextmenu="return false;"></div> <script type="text/javascript"> tree=new dhtmlXTreeObject("index_tree","100%","100%",0); tree.setImagePath("<%=request.getContextPath()%>/js/imgs/csh_dhx_skyblue/"); tree.enableCheckBoxes(1); tree.enableThreeStateCheckboxes(true); tree.loadXML("<%=request.getContextPath()%>/alarmMenuTreeAction.do?function=getAlarmMenuTree&alarmId=${alarmId}&type=${type}"); tree.setXMLAutoLoading("<%=request.getContextPath()%>/alarmMenuTreeAction.do?function=getAlarmMenuTree&alarmId=${alarmId}&type=${type}"); </script>
上面是本身寫的一個項目中的DEMOjava
看官方的調查發現,dhtmlxTree應該還能夠支持其餘服務端語言,感興趣的能夠去官網看下.node
下面簡單對一些sample進行了翻譯,歡迎拍磚api
1、外觀 1.設置加減圖標展現狀態 tree.showItemSign(tree.getSelectedItemId(), false);(false 隱藏 true 顯示) 2.設置樹的方向 tree2.enableRTL(false);--默認false 3.設置節點高度 enableMultiLineItems("300px"); 4.設置節點樣式 setItemStyle(tree.getSelectedItemId(),document.getElementById('tuds').value) <textarea id="tuds" rows="10" style="width:300px;">font-weight:bold; text-decoration:underline; 5.設置大小符號信息 tree.enableTreeImages("-Icons");//設置是否顯示圖標 tree.enableTreeLines("-Lines");//設置是否顯示鏈接線 tree.enableTextSigns("Cross Signs");//設置是否顯示交叉線(即橫線) 6.設置選中的節點的topoffset setItemTopOffset(tree.getSelectedItemId(),"60px") 7.設置皮膚 tree.setSkin('dhx_skyblue'); tree.setImagePath("http://www.cnblogs.com/codebase/imgs/"); tree.setImagePath("http://www.cnblogs.com/codebase/imgs/csh_scbrblue/"); tree.setImagePath("http://www.cnblogs.com/codebase/imgs/csh_yellowbooks/"); 8.設置節點字體顏色 setItemColor(tree.getSelectedItemId(), color1, color2);color1=color2 9.設置圖標 tree.setItemImage2(tree.getSelectedItemId(),'leaf3.gif','leaf3.gif','leaf3.gif') 2、複選框/單選 tree.enableCheckBoxes(1);//設置複選框 tree.enableThreeStateCheckboxes(true);//容許半選狀態 1.獲取選中的節點 tree.getAllChecked()--不包括父節點 2.獲取未選中的節點 tree.getAllUnchecked() 3.獲取選中的節點,包括半選狀態的 tree.getAllCheckedBranches() 4.獲取部分選中的節點對象(半選狀態的節點) tree.getAllPartiallyChecked() 1+2=3 5.單選框 tree.enableCheckBoxes(1); enableRadioButtons('db',true)--db是節點ID true則設置成單選框 setCheck(tree.getSelectedItemId(),true)--選中 setCheck(tree.getSelectedItemId(),false)--不選 showItemCheckbox(tree.getSelectedItemId(),false)--設置該節點爲複選框 disableCheckbox(tree.getSelectedItemId(),true)--去除複選框 disableCheckbox(tree.getSelectedItemId(),false)--複選框失效 disableCheckbox(tree.getSelectedItemId(),true)--恢復 setSubChecked(tree.getSelectedItemId(),true)--設置節點下面的子節點所有選中 setSubChecked(tree.getSelectedItemId(),false)--設置節點下面的子節點所有不選中 3、事件 右擊事件 menu = new dhtmlXMenuObject(); menu.setIconsPath("../common/images/"); menu.renderAsContextMenu(); menu.attachEvent("onClick", onButtonClick); menu.loadXML("../common/_context.xml"); menu.renderAsContextMenu(); menu.attachEvent("onClick", onButtonClick); tree.enableContextMenu(menu); 拖拽事件 tree.enableDragAndDrop(true); 觸發單擊事件前的事件 tree.attachEvent("onBeforeContextMenu", function(itemId) { if (tree.hasChildren(itemId) > 0) { menu.hideItem('outher'); } else { menu.showItem('outher'); } return true; }); 加載前/後事件 tree.setOnLoadingStart(func_a); tree.setOnLoadingEnd(func_b); 右擊事件 tree.setOnRightClickHandler(_rclick); 雙擊事件 setOnDblClickHandler tree.setOnOpenHandler(tonopen); tree.attachEvent("onOpenEnd", function(nodeId, event) { });
另附經常使用method,僅供參考緩存
構造函數 dhtmlXTreeObject(htmlObject, width, height, rootId)//rootId 虛擬根節點,在界面上不會顯示,通常取值0 replace IMG tag with background images - solve problem with IE image caching , not works for IE6 SP1 enableIEImageFix(mode) 析構函數 destructor() 實現繼承 clone() 節點構造函數 dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode)// mode - do not show images 從xml字符串加載樹 loadXMLString(xmlString,afterCall)//afterCall - function which will be called after xml loading 從xml文件加載樹 loadXML(file,afterCall) 新建子節點,前三個參數爲必須的 insertNewItem(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs) insertNewChild(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs) 節點展開與收縮:[1-close 2-open] _HideShow(itemObject,mode) 獲取節點狀態:0 - 沒有子節點, -1 - 節點合攏, 1 - 節點展開 _getOpenState(node) getOpenState(itemId) 獲取選中的節點Id getSelectedItemId() 選中節點 _selectItem(node,e) 獲取節點的index getIndexById(itemId) 設置鼠標右鍵點擊事件 setOnRightClickHandler(func) 設置鼠標點擊事件 setOnClickHandler(func) 設置節點狀態改變事件 setOnSelectStateChange(func) 設置容許動態加載xml文件(異步加載) setXMLAutoLoading(filePath) 設置checkbox點擊事件 setOnCheckHandler(func) 設置節點展開/合攏事件 setOnOpenHandler(func) 設置節點開始展/合攏開事件 setOnOpenStartHandler(func) 設置節點展開/合攏結束事件 setOnOpenEndHandler(func) 設置節點雙擊事件 setOnDblClickHandler(func) 展開節點及下面全部子節點 _xopenAll(node) //增長了不傳遞itemId的判斷(1494) openAllItems(itemId)//不傳遞itemId參數則合攏根節點 根據id獲取節點 _globalIdStorageFind(itemId) 合攏節點及其下全部子節點 _xcloseAll(node) //修改了原來邏輯的一個錯誤(1521) closeAllItems(itemId)//不傳遞itemId參數則合攏根節點 爲節點增長用戶自定義的數據 //修正一個錯誤(1548) setUserData(itemId,name,value) 獲取用戶自定義的數據 getUserData(itemId,name) 獲取節點顏色 getItemColor(itemId) 設置節點顏色 setItemColor(itemId,defaultColor,selectedColor) 獲取節點名稱--(with HTML formatting, if any) getItemText(itemId) 獲取父節點id getParentId(itemId) 更改節點id changeItemId(itemId,newItemId) 標記被剪切的節點 doCut() 粘貼被剪切的節點到新的父節點下 doPaste(itemId) 清空被剪切的節點 clearCut() 移動節點 _moveNode(itemObject,targetObject) 容許三種狀態的複選框(全選、不選、部分選中) enableThreeStateCheckboxes(mode)// 1 - on, 0 - off; 設置鼠標懸浮事件 setOnMouseInHandler(func) 設置鼠標移走事件 setOnMouseOutHandler(func) 設置是否容許顯示樹圖片 enableTreeImages=function(mode)//1 - on, 0 - off 設置是否容許固定模式(對於顯示覆選框的界面美觀一些,但沒有水平滾動條) enableFixedMode(mode)// - 1 - on, 0 - off 是否顯示覆選框 enableCheckBoxes(mode, hidden)//mode 0/1 hidden 0/1 設置節點圖片 setStdImages(image1,image2,image3)//a0 - image for node without childrens a1 - image for closed node a2 - image for opened node 設置是否顯示樹線 enableTreeLines(mode) 設置圖片 setImageArrays(arrayName,image1,image2,image3,image4,image5)//image1 - line crossed image image2 - image with top line image3 - image with bottom line image4 - image without line image5 - single root image 展開當前節點(一節) _openItem(node) openItem(itemId) 合攏當前節點(一節) closeItem(itemId) 獲取節點的層節數 getLevel(itemId) 設置節點是否容許被合攏 setItemCloseable(itemId,flag)//flag 0/1 對於展開節點返回子節點數量,對於未加載子節點的節點(異步加載)返回true hasChildren(itemId) 獲取節點下的子節點數 _getLeafCount(itemNode) 設置節點名稱 setItemText(itemId,newLabel,newTooltip) 獲取節點tip getItemTooltip(itemId) 刷新節點 refreshItem(itemId) 設置節點圖片 setItemImage2(itemId, image1,image2,image3)//image1 - node without childrens image image2 - closed node image image3 - open node image 設置節點圖片 setItemImage(itemId,image1,image2)//image1 - node without childrens image or closed node image (if image2 specified) image2 - open node image (optional) 獲取節點下全部子節點id以逗號分割 getSubItems(itemId) getAllSubItems(itemId) 獲取節點的全部子節點 _getAllScraggyItems(node) 獲取選中節點的名稱--(with HTML formatting, if any) getSelectedItemText() 設置節點的選中狀態 setCheck(itemId,state)//state - checkbox state (0/1/unsure) 設置節點及全部子節點的選中狀態 setSubChecked(itemId,state) 獲取節點的選中狀態 return: node state (0 - unchecked,1 - checked, 2 - third state) isItemChecked(itemId) 刪除節點的全部子節點 deleteChildItems(itemId) 刪除節點 deleteItem(itemId,selectParent) //selectParent - If true parent of deleted item get selection, else no selected items leaving in tree. 在節點下建立一個節點,前三個參數是必須的 insertNewNext(itemId,newItemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs) 根據index獲取節點下子節點的id getChildItemIdByIndex(itemId,index)//itemId 節點id 設置拖動事件 setDragHandler(func) 設置是否容許拖拽 //mode - enabled/disabled [ can be true/false/temporary_disabled - last value mean that tree can be D-n-D can be switched to true later ] //rmode - enabled/disabled drag and drop on super root enableDragAndDrop(mode,rmode) 設置是否容許IE緩存 preventIECashing=function(mode)//mode - enable/disable random seed ( disabled by default ) 設置是否容許選中節點名稱高亮顯示 enableHighlighting(mode)//mode - 1 - on, 0 - off 是否容許圖片可點擊和拖拽(clickable and dragable) enableActiveImages(mode)// mode - 1 - on, 0 - off 設置節點得到焦點 focusItem(itemId) 獲取全部無子節點的節點id getAllChildless() getAllLeafs() 獲取全部有子節點的節點id getAllItemsWithKids() 獲取全部被選中節點id,不包括第三中狀態的節點(部分選中的節點) getAllChecked() 獲取全部被選中節點id,包括第三中狀態的節點(部分選中的節點) getAllCheckedBranches() 獲取節點下全部未選中的節點id,不傳遞itemId表示從根節點開始查找 getAllUnchecked(itemId) 獲取全部部分選中的節點id(因部分子節點選中而被選中的節點) getAllPartiallyChecked() 設置節點樣式 setItemStyle(itemId,style_string) 設置是否容許拖拽圖片 enableImageDrag(mode) set function called when tree item draged over another item setOnDragIn(func) 設置拖拽是是否容許自動滾動 enableDragAndDropScrolling(mode) 補充說明:加載樹時,必須確保全部節點的id不重複,不然控件會爲重複id自動生成一個隨機數(原id+"_"+當前日期)。 增長了一個dhtmlXTreeExtend.js對原類進行擴展,增長了getAllCheckedLeaf(),getAllUcCheckedLeaf()兩個函數 修改了1個bug: 1 增長沒有選中節點時執行展開/收縮選定節點時報沒有parentId的bug dhtmlXTreeObject.prototype.setSubChecked=function(itemId,state){ if(itemId) { var sNode=this._globalIdStorageFind(itemId); this._setSubChecked(state,sNode); this._correctCheckStates(sNode.parentObject); } } 1 增長了未傳遞itemId參數時默認從根節點展開 dhtmlXTreeObject.prototype.openAllItems=function(itemId) { if (itemId==window.undefined) itemId=this.rootId; var temp=this._globalIdStorageFind(itemId); if (!temp) return 0; this._xopenAll(temp); };