jQuery ztree實(shí)現(xiàn)動(dòng)態(tài)樹形多選菜單
我用到的版本ztree core v3.5.24,需要引入的js,css,jquery.js,jquery.ztree.core.js,jquery.ztree.excheck.js(多選框可選),zTreeStyle.css。
需要注意的指向父節(jié)點(diǎn)的pId,我開始寫的是pid一開始沒注意,默認(rèn)的是pId,當(dāng)然可以pIdKey指定自定義的(未測(cè))。還有如果圖片沒顯示肯定是沒引入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' //隨便寫的,傳入后臺(tái)的值
},
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é)點(diǎn)),N:不勾(參數(shù)s:影響子節(jié)點(diǎn))[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," 后臺(tái)截取下
}
/* 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>
后臺(tái)部分可以參考2延遲加載
2、延遲加載ztree
jsp一樣的,js有所有區(qū)別,這個(gè)參考了官方api
<script type="text/javascript">
var setting = {
view: {
selectedMulti: false
},
check: {
enable: true,
chkboxType :{ "Y" : "", "N" : "s" } //Y:勾選(參數(shù):p:影響父節(jié)點(diǎn)),N:不勾(參數(shù)s:影響子節(jié)點(diǎn))[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("請(qǐng)選擇父節(jié)點(diǎn),此節(jié)點(diǎn)是根節(jié)點(diǎn)...");
return false;
} else {
return true;
}
}
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting);
});
</script>
后臺(tái)部分,也包含了1的后臺(tái),先看核心代碼,這個(gè)用的struts,哪個(gè)框架都差不多。
String flag = request.getParameter("flag");
if(flag.equals("init")){//直接加載ztree
List<Inner> list = getTrees();//得到所有節(jié)點(diǎn)
try {
convertListToJson(list);
} catch (Exception e) {
e.printStackTrace();
}
}else if(flag.equals("ajax")){//延遲加載ztree
String id = request.getParameter("id");
if(id==null){//第一次進(jìn)入初始化父節(jié)點(diǎn)
List<Inner> list = new ArrayList<OmRequestImpl.Inner>();
Inner in1=getById(1);
Inner in5=getById(5);
list.add(in1);
list.add(in5);//測(cè)試用的,得到初始化0級(jí)父節(jié)點(diǎn),應(yīng)該從數(shù)據(jù)庫中獲取。
try {
convertListToJson(list);
} catch (Exception e) {
e.printStackTrace();
}
}else{//根據(jù)父節(jié)點(diǎn)id加載對(duì)應(yīng)的子節(jié)點(diǎn)
List<Inner> list = getChilds(Integer.valueOf(id));//通過父id取得子節(jié)點(diǎn)集合,測(cè)試就自己寫個(gè)方法,應(yīng)該從數(shù)據(jù)庫中獲取。
try {
convertListToJson(list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
這里涉及了一些方法,我為了測(cè)試方便自己寫了個(gè)測(cè)試bean,正式的直接從數(shù)據(jù)庫中獲取。下面是bean及一些小方法。
public class Inner{
private Integer id;
private Integer pId; //指向父節(jié)點(diǎn)id
private String name; //顯示的內(nèi)容
private String isParent;//是否是父節(jié)點(diǎn)
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;
}
}
// -- 將運(yùn)行結(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();
}
這些方法可忽略,測(cè)試用的,可通過數(shù)據(jù)庫獲取
public List<Inner> getTrees(){
Inner in=new Inner();
in.setId(1);
in.setpId(0);
in.setIsParent("true");
in.setName("父節(jié)點(diǎn)1");
Inner in1=new Inner();
in1.setId(2);
in1.setpId(1);
in1.setName("子節(jié)點(diǎn)11");
in1.setIsParent("true");
Inner in2=new Inner();
in2.setId(3);
in2.setpId(1);
in2.setName("子節(jié)點(diǎn)12");
Inner in3=new Inner();
in3.setId(4);
in3.setpId(2);
in3.setName("子節(jié)點(diǎn)111");
Inner in4=new Inner();
in4.setId(5);
in4.setpId(0);
in4.setIsParent("true");
in4.setName("父節(jié)點(diǎn)2");
Inner in5=new Inner();
in5.setId(6);
in5.setpId(5);
in5.setName("子節(jié)點(diǎn)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)容,請(qǐng)參考專題《jQuery插件ztree使用匯總》
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery中的CSS樣式屬性css()及width()系列大全
本文給大家分享jQuery的CSS樣式屬性css(),width()系列,offset()與position(),scrollLeft()與scrollTop()的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-08-08
jquery基于layui實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)下拉選擇(省份城市選擇)
本篇文章主要介紹了jquery基于layui實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)下拉選擇(省份城市選擇),具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2017-06-06
jQuery解決input元素的blur事件和其他非表單元素的click事件沖突問題
這篇文章主要介紹了jQuery解決input元素的blur事件和其他非表單元素的click事件沖突問題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
在網(wǎng)站上應(yīng)該用的30個(gè)jQuery插件整理
jQuery插件是網(wǎng)頁設(shè)計(jì)師最喜歡的。從圖像滑塊,圖像畫廊和導(dǎo)航插件,它們是如此眾多,如此多樣,如此驚人的和互動(dòng)可以制作美化網(wǎng)站2011-11-11
利用jQuery接受和處理xml數(shù)據(jù)的代碼(.net)
以下使用jQuery+Servlet接受和處理xml數(shù)據(jù),模擬判斷用戶名是否存在2011-03-03

