jQuery ztree實現(xiàn)動態(tài)樹形多選菜單
我用到的版本ztree core v3.5.24,需要引入的js,css,jquery.js,jquery.ztree.core.js,jquery.ztree.excheck.js(多選框可選),zTreeStyle.css。
需要注意的指向父節(jié)點的pId,我開始寫的是pid一開始沒注意,默認的是pId,當然可以pIdKey指定自定義的(未測)。還有如果圖片沒顯示肯定是沒引入img圖片,記得寫好路徑。
1、先介紹初始化加載ztree
jsp
<div > <ul id="treeDemo" class="ztree" style="margin-top: 0; width: 160px;"> </ul> </div>
js
<script type="text/javascript"> $(function(){ $.ajax({ url: '${contextPath}/om/quoteOmRequest.do?flag=init', data: { name : '1' //隨便寫的,傳入后臺的值 }, type:'post', traditional: true, success: function(data){ var dataObj = eval(data); var zTreeObj; var setting = { data: { simpleData: { enable:true, /* idKey: "id", pIdKey: "pId" */ } }, check: { enable: true, chkboxType :{ "Y" : "", "N" : "s" } //Y:勾選(參數(shù):p:影響父節(jié)點),N:不勾(參數(shù)s:影響子節(jié)點)[p 和 s 為參數(shù),參數(shù)都不寫""為全不影響] }, callback: { onCheck: function() { var zTree = $.fn.zTree.getZTreeObj("treeDemo"); var checkCount = zTree.getCheckedNodes(true); var classpurview = ""; for(var i=0;i<checkCount.length;i++) { classpurview += checkCount[i].id+"," //存入數(shù)據(jù)的id,比如這種形式"1,2,5," 后臺截取下 } /* alert(classpurview); */ } , }, view: { showLine: true, showIcon: true, dblClickExpand: true }, }; var zNodes = dataObj; $(document).ready(function(){ $.fn.zTree.init($("#treeDemo"), setting, zNodes); }); }, error : function() { alert("異常!"); } }); }); </script>
后臺部分可以參考2延遲加載
2、延遲加載ztree
jsp一樣的,js有所有區(qū)別,這個參考了官方api
<script type="text/javascript"> var setting = { view: { selectedMulti: false }, check: { enable: true, chkboxType :{ "Y" : "", "N" : "s" } //Y:勾選(參數(shù):p:影響父節(jié)點),N:不勾(參數(shù)s:影響子節(jié)點)[p 和 s 為參數(shù),參數(shù)都不寫""為全不影響] }, async: { enable: true, url:"${contextPath}/om/quoteOmRequest.do?flag=ajax", autoParam:["id"], dataFilter: filter }, callback: { beforeClick: beforeClick, } }; function filter(treeId, parentNode, childNodes) { if (!childNodes) return null; for (var i=0, l=childNodes.length; i<l; i++) { childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.'); } return childNodes; } function beforeClick(treeId, treeNode) { if (!treeNode.isParent) { alert("請選擇父節(jié)點,此節(jié)點是根節(jié)點..."); return false; } else { return true; } } $(document).ready(function(){ $.fn.zTree.init($("#treeDemo"), setting); }); </script>
后臺部分,也包含了1的后臺,先看核心代碼,這個用的struts,哪個框架都差不多。
String flag = request.getParameter("flag"); if(flag.equals("init")){//直接加載ztree List<Inner> list = getTrees();//得到所有節(jié)點 try { convertListToJson(list); } catch (Exception e) { e.printStackTrace(); } }else if(flag.equals("ajax")){//延遲加載ztree String id = request.getParameter("id"); if(id==null){//第一次進入初始化父節(jié)點 List<Inner> list = new ArrayList<OmRequestImpl.Inner>(); Inner in1=getById(1); Inner in5=getById(5); list.add(in1); list.add(in5);//測試用的,得到初始化0級父節(jié)點,應(yīng)該從數(shù)據(jù)庫中獲取。 try { convertListToJson(list); } catch (Exception e) { e.printStackTrace(); } }else{//根據(jù)父節(jié)點id加載對應(yīng)的子節(jié)點 List<Inner> list = getChilds(Integer.valueOf(id));//通過父id取得子節(jié)點集合,測試就自己寫個方法,應(yīng)該從數(shù)據(jù)庫中獲取。 try { convertListToJson(list); } catch (Exception e) { e.printStackTrace(); } } }
這里涉及了一些方法,我為了測試方便自己寫了個測試bean,正式的直接從數(shù)據(jù)庫中獲取。下面是bean及一些小方法。
public class Inner{ private Integer id; private Integer pId; //指向父節(jié)點id private String name; //顯示的內(nèi)容 private String isParent;//是否是父節(jié)點 public Inner(){ this.isParent="false"; } public String getIsParent() { return isParent; } public void setIsParent(String isParent) { this.isParent = isParent; } public Integer getpId() { return pId; } public void setpId(Integer pId) { this.pId = pId; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } // -- 將運行結(jié)果用json字符返回客戶端 public void convertListToJson(List<?> list)throws Exception{ JSONArray json = JSONArray.fromObject(list); response.setHeader("Cache-Control", "no-cache"); response.setContentType("text/html; charset=UTF-8"); PrintWriter writer; writer = response.getWriter(); writer.write(json.toString()); writer.close(); }
這些方法可忽略,測試用的,可通過數(shù)據(jù)庫獲取
public List<Inner> getTrees(){ Inner in=new Inner(); in.setId(1); in.setpId(0); in.setIsParent("true"); in.setName("父節(jié)點1"); Inner in1=new Inner(); in1.setId(2); in1.setpId(1); in1.setName("子節(jié)點11"); in1.setIsParent("true"); Inner in2=new Inner(); in2.setId(3); in2.setpId(1); in2.setName("子節(jié)點12"); Inner in3=new Inner(); in3.setId(4); in3.setpId(2); in3.setName("子節(jié)點111"); Inner in4=new Inner(); in4.setId(5); in4.setpId(0); in4.setIsParent("true"); in4.setName("父節(jié)點2"); Inner in5=new Inner(); in5.setId(6); in5.setpId(5); in5.setName("子節(jié)點21"); List<Inner> list=new ArrayList<Inner>(); list.add(in); list.add(in1); list.add(in2); list.add(in3); list.add(in4); list.add(in5); return list; } public Inner getById(Integer id){ List<Inner> list = getTrees(); for (Inner inner : list) { if(id==inner.getId()){ Inner in=inner; return in; } } return null; } public List<Inner> getChilds(Integer id){ List<Inner> list = getTrees(); List<Inner> result =new ArrayList<OmRequestImpl.Inner>(); for (Inner inner : list) { if(id.intValue()==inner.getpId().intValue()){ result.add(inner); } } return result; }
更多關(guān)于ztree控件的內(nèi)容,請參考專題《jQuery插件ztree使用匯總》
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- jquery實現(xiàn)自定義樹形表格的方法【自定義樹形結(jié)構(gòu)table】
- jQuery 利用ztree實現(xiàn)樹形表格的實例代碼
- 推薦8款jQuery輕量級樹形Tree插件
- jQuery樹形控件zTree使用小結(jié)
- jquery ztree實現(xiàn)下拉樹形框使用到了json數(shù)據(jù)
- json+jQuery實現(xiàn)的無限級樹形菜單效果代碼
- jquery實現(xiàn)樹形菜單完整代碼
- jQuery 樹形結(jié)構(gòu)的選擇器
- 輕松學(xué)習(xí)jQuery插件EasyUI EasyUI創(chuàng)建樹形菜單
- jQuery實現(xiàn)樹形員工信息表
相關(guān)文章
Expandable "Detail" Table Rows
Expandable "Detail" Table Rows...2007-08-08jQuery時間驗證和轉(zhuǎn)換為標準格式的時間格式
本篇文章主要介紹了jQuery時間驗證和轉(zhuǎn)換為標準格式的時間示例代碼,具有一定的參考價值,有興趣的可以了解一下。2017-03-03jQuery學(xué)習(xí)基礎(chǔ)知識小結(jié)
jQuery學(xué)習(xí)基礎(chǔ)知識小結(jié),剛開始學(xué)習(xí)jquery的朋友可以參考下。2010-11-11