【ztree】zTree節點增刪改
今天遇到一個需求是對zTree的節點進行增刪改,經過查閱資料總結如下: 效果: 完成增刪改,要注意幾個關鍵點: 使用 編輯功能,必須設定 setting.edit 中的各個屬性使用 編輯功能的事件回撥函式,必須設定 setting.callback.beforeRemove / onRemove / beforeRename / onRename 等屬性zTree 不提供預設的增加按鈕,如要實現需要利用自定義控制元件的方法 addHoverDom / removeHoverDom 我們利用 beforeEditName 來觸發自定義的編輯操作 首先,我們來看看具體的配置資訊(詳細內容見程式碼中的註釋):
<head>
<meta charset="UTF-8">
<title>zTree測試</title>
<link rel="stylesheet" type="text/css" href="css/demo.css" />
<link rel="stylesheet" type="text/css" href="css/zTreeStyle/zTreeStyle.css" />
<script src="js/jquery-1.4.4.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/jquery.ztree.all.js" type="text/javascript" charset="utf-8"></script>
</head>
<script type="text/javascript">
var zTree;
var setting = {
view:{
addHoverDom:addHoverDom,
removeHoverDom:removeHoverDom,
selectedMulti:false
},
edit: {
enable: true,
editNameSelectAll:true,
removeTitle:'刪除',
renameTitle:'重新命名'
},
data: {
/ keep:{
parent:true,
leaf:true
}, /
simpleData: {
enable: true
}
},
callback:{
beforeRemove:beforeRemove,//點選刪除時觸發,用來提示使用者是否確定刪除(可以根據返回值 true|false 確定是否可以刪除)
beforeEditName: beforeEditName,//點選編輯時觸發,用來判斷該節點是否能編輯
beforeRename:beforeRename,//編輯結束時觸發,用來驗證輸入的資料是否符合要求(也是根據返回值 true|false 確定是否可以編輯完成)
onRemove:onRemove,//(beforeRemove返回true之後可以進行onRemove)刪除節點後觸發,使用者後臺操作
onRename:onRename,//編輯後觸發,用於操作後臺
beforeDrag:beforeDrag,//使用者禁止拖動節點
onClick:clickNode//點選節點觸發的事件
}
};
var zNodes =[
{ id:1, pId:0, name:"父節點 1", open:true},
{ id:11, pId:1, name:"去百度",url:'http://www.baidu.com</span><span style="background-color: #f5f5f5; color: #000000;">',target:'_blank'},
{ id:12, pId:1, name:"葉子節點 1-2"},
{ id:13, pId:1, name:"葉子節點 1-3"},
{ id:2, pId:0, name:"父節點 2", open:true},
{ id:21, pId:2, name:"葉子節點 2-1"},
{ id:22, pId:2, name:"葉子節點 2-2"},
{ id:23, pId:2, name:"葉子節點 2-3"},
{ id:3, pId:0, name:"父節點 3", open:true},
{ id:31, pId:3, name:"葉子節點 3-1"},
{ id:32, pId:3, name:"葉子節點 3-2"},
{ id:33, pId:3, name:"葉子節點 3-3"}
];
$(document).ready(function(){
zTree = $.fn.zTree.init($("#tree"), setting, zNodes);
});
function beforeRemove(e,treeId,treeNode){
return confirm("你確定要刪除嗎?");
}
function onRemove(e,treeId,treeNode){
if(treeNode.isParent){
var childNodes = zTree.removeChildNodes(treeNode);
var paramsArray = new Array();
for(var i = 0; i < childNodes.length; i++){
paramsArray.push(childNodes[i].id);
}
alert("刪除父節點的id為:"+treeNode.id+"\r\n他的孩子節點有:"+paramsArray.join(","));
return;
}
alert("你點選要刪除的節點的名稱為:"+treeNode.name+"\r\n"+"節點id為:"+treeNode.id);
}
function beforeEditName(treeId,treeNode){
/ if(treeNode.isParent){
alert("不準編輯非葉子節點!");
return false;
} /
return true;
}
function beforeRename(treeId,treeNode,newName,isCancel){
if(newName.length < 3){
alert("名稱不能少於3個字元!");
return false;
}
return true;
}
function onRename(e,treeId,treeNode,isCancel){
alert("修改節點的id為:"+treeNode.id+"\n修改後的名稱為:"+treeNode.name);
}
function clickNode(e,treeId,treeNode){
if(treeNode.id == 11){
location.href=treeNode.url;
}else{
alert("節點名稱:"+treeNode.name+"\n節點id:"+treeNode.id);
}
}
function beforeDrag(treeId,treeNodes){
return false;
}
var newCount = 1;
function addHoverDom(treeId,treeNode){
var sObj = $("#" + treeNode.tId + "_span");
if (treeNode.editNameFlag || $("#addBtn"+treeNode.tId).length>0) return;
var addStr = "<span class='button add' id='addBtn" + treeNode.tId
+ "' title='新增子節點' onfocus='this.blur();'></span>";
sObj.after(addStr);
var btn = $("#addBtn"+treeNode.tId);
if (btn) btn.bind("click", function(){
//在這裡向後臺傳送請求儲存一個新建的葉子節點,父id為treeNode.id,讓後將下面的100+newCount換成返回的id
//zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:"新建節點" + (newCount++)});
alert("開始新增節點")
return false;
});
}
function removeHoverDom(treeId,treeNode){
$("#addBtn"+treeNode.tId).unbind().remove();
}
</script>
$(document).ready(function() {
geneTypeTree();
});
/S 刪除/
function beforeRemove(treeId, treeNode) {
if(confirm(“確認刪除?\n將會刪除下面的所有視訊!”)){
if(treeNode.isParent){
alert(“該目錄下面還有子目錄,請從最底層目錄開始刪除!”);
return false;
}
return true;
}
return false;
}
function onRemove(e, treeId,treeNode) {
var typeId = treeNode.typeId;
$.post(contextPath+"/trainacontentType_deleteTrainContentTypeById.action",
{“typeId”:typeId},
function(repsonse){
alert(repsonse.result);
if(“刪除成功”==repsonse.result)//刪除成功之後執行查詢
btnFindFy();
}
,‘json’)
}
/E 刪除*/
function beforeEditName(treeId,treeNode) {
/ if(treeNode.isParent){
alert(“不準編輯非葉子節點!”);
return false;
} /
return true;
}
function beforeRename(treeId,treeNode, newName,isCancel) {
if (newName.length < 3) {
alert(“名稱不能少於3個字元!”);
return false;
}
return true;
}
function onRename(e, treeId,treeNode, isCancel) {
if(confirm(“您確認修改類別名稱?”)){
$.post(contextPath+"/trainacontentType_updateTraincontenttypeName.action",
{
“traincontenttype.typeid”:treeNode.typeId,
“traincontenttype.typename”:treeNode.typeName
},
function(response){
if(response != null){
if(“修改成功”==response.result){
alert(response.result);
}
}
}
,
‘json’);
}
}
/S 點選事件*/
function clickNode(e, treeId,treeNode) {
$("#trainContentTypeId").val(treeNode.typeId);//向隱藏的類別編號賦值
$("[name=‘typeId’]").val(treeNode.typeId);//向隱藏的類別編號賦值
$("#yeHao").val(“1”);
btnFindFy();
}
/E 點選事件**/
function addHoverDom(treeId,treeNode) {
var sObj = $("#"+ treeNode.tId+ “_span”);
if (treeNode.editNameFlag|| $("#addBtn"+ treeNode.tId).length > 0)
return;
var addStr = “”;
sObj.after(addStr);
var btn = $("#addBtn"+ treeNode.tId);
if (btn)btn.bind(“click”,function() {
if(confirm(“確認在該目錄下面新增培訓內容類別?”)){
var typeName = prompt(“請輸入類別名稱”);//獲取到的名字
if(typeName != null){//點選確定
if(typeName.length>1){
var upId = treeNode.typeId;//上級編號
$.post(contextPath+"/trainacontentTypeaddTraincontenttype.action",
{
“traincontenttype.upid”:upId,
“traincontenttype.typename”:typeName
},
function(response){
if(response!=null){
alert(response.result);
}
if(response.result == “新增成功” ){
var traincontenttype = response.traincontenttype;//獲取返回來的資料
zTree.addNodes(treeNode, {typeId:traincontenttype.typeid, upId:treeNode.id, typeName:typeName});
}
// geneTypeTree();
},
‘json’);
}else{
alert(“請輸入正確的類別名稱”)
}
}
}
//在這裡向後臺傳送請求儲存一個新建的葉子節點,父id為treeNode.id,讓後將下面的100+newCount換成返回的id
//zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:“新建節點” + (newCount++)});
return false;
});
}
function removeHoverDom(treeId,treeNode) {
$("#addBtn" + treeNode.tId).unbind().remove();
} 下面附一個更加詳細的最近用到的樹: (包含展開所有節點,點選,重新命名,刪除,新增等事件,以及驗證操作)/*S 左邊樹相關操作/
/
查詢課程類別樹結構
/
function getTypeTree(){
KaTeX parse error: Expected '}', got 'EOF' at end of input: …trainSchemeId":("#trainSchemeId").val()},geneTypeTree);
}
/
生成課程類別樹函式
@param typeTree 返回的課程類別資訊(多一條虛擬的課程類別節點)
/
function geneTypeTree(typeTree){
var setting = {
view : {
addHoverDom : addHoverDom,//用於當滑鼠移動到節點上時,顯示使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
removeHoverDom : removeHoverDom,//用於當滑鼠移出節點時,隱藏使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
selectedMulti : false //設定是否允許同時選中多個節點。
},
edit : {
enable : true,//設定 zTree 是否處於編輯狀態
editNameSelectAll : true,//節點編輯名稱 input 初次顯示時,設定 txt 內容是否為全選狀態。
removeTitle : ‘刪除課程類別’,
renameTitle : ‘重新命名課程類別’
},
data : {
simpleData : {
enable : true,
idKey : “typenum”,
pIdKey : “uptypenum”,
rootPId : “1”
},
key : {
name : “typename”,
}
},
callback : {
beforeRemove : beforeRemove,//點選刪除時觸發,用來提示使用者是否確定刪除
beforeEditName : beforeEditName,//點選編輯時觸發,用來判斷該節點是否能編輯
beforeRename : beforeRename,//編輯結束時觸發,用來驗證輸入的資料是否符合要求
onRemove : onRemove,//刪除節點後觸發,使用者後臺操作
onRename : onRename,//編輯後觸發,用於操作後臺
onClick : clickNode//點選節點觸發的事件
}
};
var treeNodes = typeTree;//樹節點資料(從後臺獲取)
("#treeDiv"), setting, treeNodes);//在介面生成一顆樹
openAllTreenode();//展開樹的所有節點
}
/
展開樹的所有節點
/
function openAllTreenode(){
// 獲取樹物件
var treeObj = $.fn.zTree.getZTreeObj("treeDiv");
/ 獲取所有樹節點 /
var nodes = treeObj.transformToArray(treeObj.getNodes());
// 展開除第一級之外的其他節點
for (var i = 0, length1 = nodes.length; i < length_1; i++) {
if(nodes[i].level == 0){
continue;
}
nodes[i].open = true;
}
//展開第一級節點
treeObj.expandNode(nodes[0], true);
}
/S 刪除/
/
刪除前的詢問(驗證是否可以刪除)
@param treeId
@param treeNode 需要刪除的樹節點
@returns {boolean} 是否可以執行刪除函式
/
function beforeRemove(treeId, treeNode) {
var layer =getLauiLayer();
if(treeNode.level == 0){
layer.msg(“您不可以刪除根節點!請從二級節點開始操作!”,{icon:2,shade: [0.8, ‘#393D49’]})
return false;
}
if(treeNode.isParent){
layer.msg(“該目錄下面還有子目錄,請從最底層目錄開始刪除!”,{icon:2,shade: [0.8, ‘#393D49’]})
return false;
}
//如果表格中有資料就不讓刪除
if($("#trainCourseTbody").children(“tr”).length>0){
layer.msg(“該節點已經排有課程,不允許刪除課程類別!先刪除培養方案課程!”,{icon:2,time:21000,shade: [0.8, ‘#393D49’]});
return false;
}
if(confirm(“確認刪除?”)){
return true;
}
return false;
}
/
刪除的操作
@param e 事件
@param treeId 樹的介面中的ID
@param treeNode 節點
/
function onRemove(e, treeId,treeNode) {
var layer = getLauiLayer();
var trainSchemeId = getTrainSchemeId();//培養方案編號
var typeNum = treeNode.typenum;//類別num
$.post(contextPath+"/courseType/deleteCourseType.do",{“trainSchemeId”:trainSchemeId,“typeNum”:typeNum},function (response) {
layer.msg(response,{time:21000,shade: [0.8, ‘#393D49’]},function () {
if(“刪除成功” == response){
getTypeTree();//重新生成樹
//1.清空條件
var form = $("#queryTrainCourseForm");
form.find(“input”).not("#queryTrainCourseTrainshemeId").val("");
form.find(“select”).val("");
//2.重新查詢一次
queryTrainCourseByCondition();
}
})
},‘text’)
}
/E 刪除*/
/S 編輯根節點/
/
驗證是否可以進入編輯模式
@param treeId
@param treeNode
@returns {boolean} true|false代表是否進入編輯模式
/
function beforeEditName(treeId,treeNode) {
var layer;
layui.use([‘layer’],function () {
layer = layui.layer;
});
//如果是根節點不允許編輯
if(treeNode.level == 0 ){
layer.msg(“您不能編輯根節點!”,{icon:2,shade: [0.8, ‘#393D49’]});
return false;
}
return true;
}
/
用於捕獲節點編輯名稱結束(Input 失去焦點 或 按下 Enter 鍵)之後,更新節點名稱資料之前的事件回撥函式,並且根據返回值確定是否允許更改名稱的操作
@param treeId
@param treeNode
@param newName
@param isCancel
@returns {boolean} 是否成功
/
function beforeRename(treeId,treeNode, newName,isCancel) {
var layer;
layui.use([‘layer’],function () {
layer = layui.layer;
})
if (($.trim(newName)).length < 2) {
layer.alert(“名稱不能少於2個字元!”)
return false;
}
return true;
}
/
修改名稱的操作(正經的修改傳到後臺進行操作)
@param e
@param treeId
@param treeNode
@param isCancel
/
function onRename(e, treeId,treeNode, isCancel) {
//如果選擇了取消,重新查一下樹
if(isCancel == true){
getTypeTree()
return false;
}
if(confirm(“您確認修改類別名稱?”)) {
KaTeX parse error: Expected '}', got 'EOF' at end of input: …trainSchemeId":("#trainSchemeId").val(),
“typeNum”:treeNode.typenum,
“typeName”:treeNode.typename
},
function(response){
if(response != null){
var layer;
layui.use(“layer”,function () {
layer = layui.layer;
});
layer.msg(response,{shade: [0.8, ‘#393D49’],time:21000,icon:1},function () {
if(“修改成功”==response){
getTypeTree();//修改成功之後重新查一下樹
}
})
}
}
,
‘text’);
}else {//如果選擇了取消重新查一下樹
getTypeTree();//取消之後重新查樹
}
}
/**E 編輯根節點/
/S 點選事件/
/
點選事件
@param e 事件
@param treeId 樹節點的ID
@param treeNode 樹節點
/
function clickNode(e, treeId,treeNode) {
$("#trainCourseTypeNum").val(treeNode.typenum);//向隱藏的課程類別編號賦值(最後新增到表單中傳到後臺儲存)
$("#trainCourseTypeName").val(treeNode.typename);//
$("#typeNum_0").val(treeNode.typenum);//向隱藏的課程類別編號賦值
// queryTrainCourseByCondition();//分頁查詢培養方案課程資訊
clearConditionAndQueryTrainCourse();
}
/E 點選事件/
/
增加一個課程類別事件(自定義元件),用於當滑鼠移動到節點上時,顯示使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
@param treeId 樹節點在介面的編號
@param treeNode 樹節點
*/
function addHoverDom(treeId,treeNode) {
//1.初始化layer模組
var layer;
layui.use([‘layer’],function () {
layer = layui.layer;
})
//2.
var sObj = $("#"+ treeNode.tId+ “_span”);
if (treeNode.editNameFlag|| $("#addBtn"+ treeNode.tId).length > 0)
return;
var addStr = “”;
sObj.after(addStr);
var btn = KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲addBtn"+ treeNo…("#trainCourseTbody").children(“tr”).length>0){
layer.msg(“該節點已經排有課程,不允許新增課程類別!”,{icon:2,time:21000,shade: [0.8, ‘#393D49’]});
return;
}
if(confirm(“確認在類別 “+name+” 下新增新的類別?”)){
//1.向隱藏的地方賦值
$(".clear-input").val("");//清空殘留的資料
$("#addType_uptypenum").val(typenum);//上級編號
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲add_trainingsch…("#trainSchemeId").val());//培養方案編號
$("#addType_upTypeName").val(name);//上級類別名稱
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲addType_remark"…(window).width()0.80+‘px’, (’#addTypeModal’)
});
//向頁面隱藏index
$("#hidden_addType_index").val(index);
}
});
}
/
用於當滑鼠移出節點時,隱藏使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
@param treeId
@param treeNode
/
function removeHoverDom(treeId,treeNode) {
$("#addBtn_" + treeNode.tId).unbind().remove();
}
/S 左邊樹相關操作*/今天遇到一個需求是對zTree的節點進行增刪改,經過查閱資料總結如下: 效果: 完成增刪改,要注意幾個關鍵點: 使用 編輯功能,必須設定 setting.edit 中的各個屬性使用 編輯功能的事件回撥函式,必須設定 setting.callback.beforeRemove / onRemove / beforeRename / onRename 等屬性zTree 不提供預設的增加按鈕,如要實現需要利用自定義控制元件的方法 addHoverDom / removeHoverDom 我們利用 beforeEditName 來觸發自定義的編輯操作 首先,我們來看看具體的配置資訊(詳細內容見程式碼中的註釋):
<head>
<meta charset="UTF-8">
<title>zTree測試</title>
<link rel="stylesheet" type="text/css" href="css/demo.css" />
<link rel="stylesheet" type="text/css" href="css/zTreeStyle/zTreeStyle.css" />
<script src="js/jquery-1.4.4.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/jquery.ztree.all.js" type="text/javascript" charset="utf-8"></script>
</head>
<script type="text/javascript">
var zTree;
var setting = {
view:{
addHoverDom:addHoverDom,
removeHoverDom:removeHoverDom,
selectedMulti:false
},
edit: {
enable: true,
editNameSelectAll:true,
removeTitle:'刪除',
renameTitle:'重新命名'
},
data: {
/ keep:{
parent:true,
leaf:true
}, /
simpleData: {
enable: true
}
},
callback:{
beforeRemove:beforeRemove,//點選刪除時觸發,用來提示使用者是否確定刪除(可以根據返回值 true|false 確定是否可以刪除)
beforeEditName: beforeEditName,//點選編輯時觸發,用來判斷該節點是否能編輯
beforeRename:beforeRename,//編輯結束時觸發,用來驗證輸入的資料是否符合要求(也是根據返回值 true|false 確定是否可以編輯完成)
onRemove:onRemove,//(beforeRemove返回true之後可以進行onRemove)刪除節點後觸發,使用者後臺操作
onRename:onRename,//編輯後觸發,用於操作後臺
beforeDrag:beforeDrag,//使用者禁止拖動節點
onClick:clickNode//點選節點觸發的事件
}
};
var zNodes =[
{ id:1, pId:0, name:"父節點 1", open:true},
{ id:11, pId:1, name:"去百度",url:'http://www.baidu.com</span><span style="background-color: #f5f5f5; color: #000000;">',target:'_blank'},
{ id:12, pId:1, name:"葉子節點 1-2"},
{ id:13, pId:1, name:"葉子節點 1-3"},
{ id:2, pId:0, name:"父節點 2", open:true},
{ id:21, pId:2, name:"葉子節點 2-1"},
{ id:22, pId:2, name:"葉子節點 2-2"},
{ id:23, pId:2, name:"葉子節點 2-3"},
{ id:3, pId:0, name:"父節點 3", open:true},
{ id:31, pId:3, name:"葉子節點 3-1"},
{ id:32, pId:3, name:"葉子節點 3-2"},
{ id:33, pId:3, name:"葉子節點 3-3"}
];
$(document).ready(function(){
zTree = $.fn.zTree.init($("#tree"), setting, zNodes);
});
function beforeRemove(e,treeId,treeNode){
return confirm("你確定要刪除嗎?");
}
function onRemove(e,treeId,treeNode){
if(treeNode.isParent){
var childNodes = zTree.removeChildNodes(treeNode);
var paramsArray = new Array();
for(var i = 0; i < childNodes.length; i++){
paramsArray.push(childNodes[i].id);
}
alert("刪除父節點的id為:"+treeNode.id+"\r\n他的孩子節點有:"+paramsArray.join(","));
return;
}
alert("你點選要刪除的節點的名稱為:"+treeNode.name+"\r\n"+"節點id為:"+treeNode.id);
}
function beforeEditName(treeId,treeNode){
/ if(treeNode.isParent){
alert("不準編輯非葉子節點!");
return false;
} /
return true;
}
function beforeRename(treeId,treeNode,newName,isCancel){
if(newName.length < 3){
alert("名稱不能少於3個字元!");
return false;
}
return true;
}
function onRename(e,treeId,treeNode,isCancel){
alert("修改節點的id為:"+treeNode.id+"\n修改後的名稱為:"+treeNode.name);
}
function clickNode(e,treeId,treeNode){
if(treeNode.id == 11){
location.href=treeNode.url;
}else{
alert("節點名稱:"+treeNode.name+"\n節點id:"+treeNode.id);
}
}
function beforeDrag(treeId,treeNodes){
return false;
}
var newCount = 1;
function addHoverDom(treeId,treeNode){
var sObj = $("#" + treeNode.tId + "_span");
if (treeNode.editNameFlag || $("#addBtn"+treeNode.tId).length>0) return;
var addStr = "<span class='button add' id='addBtn" + treeNode.tId
+ "' title='新增子節點' onfocus='this.blur();'></span>";
sObj.after(addStr);
var btn = $("#addBtn"+treeNode.tId);
if (btn) btn.bind("click", function(){
//在這裡向後臺傳送請求儲存一個新建的葉子節點,父id為treeNode.id,讓後將下面的100+newCount換成返回的id
//zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:"新建節點" + (newCount++)});
alert("開始新增節點")
return false;
});
}
function removeHoverDom(treeId,treeNode){
$("#addBtn"+treeNode.tId).unbind().remove();
}
</script>
$(document).ready(function() {
geneTypeTree();
});
/S 刪除/
function beforeRemove(treeId, treeNode) {
if(confirm(“確認刪除?\n將會刪除下面的所有視訊!”)){
if(treeNode.isParent){
alert(“該目錄下面還有子目錄,請從最底層目錄開始刪除!”);
return false;
}
return true;
}
return false;
}
function onRemove(e, treeId,treeNode) {
var typeId = treeNode.typeId;
$.post(contextPath+"/trainacontentType_deleteTrainContentTypeById.action",
{“typeId”:typeId},
function(repsonse){
alert(repsonse.result);
if(“刪除成功”==repsonse.result)//刪除成功之後執行查詢
btnFindFy();
}
,‘json’)
}
/E 刪除*/
function beforeEditName(treeId,treeNode) {
/ if(treeNode.isParent){
alert(“不準編輯非葉子節點!”);
return false;
} /
return true;
}
function beforeRename(treeId,treeNode, newName,isCancel) {
if (newName.length < 3) {
alert(“名稱不能少於3個字元!”);
return false;
}
return true;
}
function onRename(e, treeId,treeNode, isCancel) {
if(confirm(“您確認修改類別名稱?”)){
$.post(contextPath+"/trainacontentType_updateTraincontenttypeName.action",
{
“traincontenttype.typeid”:treeNode.typeId,
“traincontenttype.typename”:treeNode.typeName
},
function(response){
if(response != null){
if(“修改成功”==response.result){
alert(response.result);
}
}
}
,
‘json’);
}
}
/S 點選事件*/
function clickNode(e, treeId,treeNode) {
$("#trainContentTypeId").val(treeNode.typeId);//向隱藏的類別編號賦值
$("[name=‘typeId’]").val(treeNode.typeId);//向隱藏的類別編號賦值
$("#yeHao").val(“1”);
btnFindFy();
}
/E 點選事件**/
function addHoverDom(treeId,treeNode) {
var sObj = $("#"+ treeNode.tId+ “_span”);
if (treeNode.editNameFlag|| $("#addBtn"+ treeNode.tId).length > 0)
return;
var addStr = “”;
sObj.after(addStr);
var btn = $("#addBtn"+ treeNode.tId);
if (btn)btn.bind(“click”,function() {
if(confirm(“確認在該目錄下面新增培訓內容類別?”)){
var typeName = prompt(“請輸入類別名稱”);//獲取到的名字
if(typeName != null){//點選確定
if(typeName.length>1){
var upId = treeNode.typeId;//上級編號
$.post(contextPath+"/trainacontentTypeaddTraincontenttype.action",
{
“traincontenttype.upid”:upId,
“traincontenttype.typename”:typeName
},
function(response){
if(response!=null){
alert(response.result);
}
if(response.result == “新增成功” ){
var traincontenttype = response.traincontenttype;//獲取返回來的資料
zTree.addNodes(treeNode, {typeId:traincontenttype.typeid, upId:treeNode.id, typeName:typeName});
}
// geneTypeTree();
},
‘json’);
}else{
alert(“請輸入正確的類別名稱”)
}
}
}
//在這裡向後臺傳送請求儲存一個新建的葉子節點,父id為treeNode.id,讓後將下面的100+newCount換成返回的id
//zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:“新建節點” + (newCount++)});
return false;
});
}
function removeHoverDom(treeId,treeNode) {
$("#addBtn" + treeNode.tId).unbind().remove();
} 下面附一個更加詳細的最近用到的樹: (包含展開所有節點,點選,重新命名,刪除,新增等事件,以及驗證操作)/*S 左邊樹相關操作/
/
查詢課程類別樹結構
/
function getTypeTree(){
KaTeX parse error: Expected '}', got 'EOF' at end of input: …trainSchemeId":("#trainSchemeId").val()},geneTypeTree);
}
/
生成課程類別樹函式
@param typeTree 返回的課程類別資訊(多一條虛擬的課程類別節點)
/
function geneTypeTree(typeTree){
var setting = {
view : {
addHoverDom : addHoverDom,//用於當滑鼠移動到節點上時,顯示使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
removeHoverDom : removeHoverDom,//用於當滑鼠移出節點時,隱藏使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
selectedMulti : false //設定是否允許同時選中多個節點。
},
edit : {
enable : true,//設定 zTree 是否處於編輯狀態
editNameSelectAll : true,//節點編輯名稱 input 初次顯示時,設定 txt 內容是否為全選狀態。
removeTitle : ‘刪除課程類別’,
renameTitle : ‘重新命名課程類別’
},
data : {
simpleData : {
enable : true,
idKey : “typenum”,
pIdKey : “uptypenum”,
rootPId : “1”
},
key : {
name : “typename”,
}
},
callback : {
beforeRemove : beforeRemove,//點選刪除時觸發,用來提示使用者是否確定刪除
beforeEditName : beforeEditName,//點選編輯時觸發,用來判斷該節點是否能編輯
beforeRename : beforeRename,//編輯結束時觸發,用來驗證輸入的資料是否符合要求
onRemove : onRemove,//刪除節點後觸發,使用者後臺操作
onRename : onRename,//編輯後觸發,用於操作後臺
onClick : clickNode//點選節點觸發的事件
}
};
var treeNodes = typeTree;//樹節點資料(從後臺獲取)
("#treeDiv"), setting, treeNodes);//在介面生成一顆樹
openAllTreenode();//展開樹的所有節點
}
/
展開樹的所有節點
/
function openAllTreenode(){
// 獲取樹物件
var treeObj = $.fn.zTree.getZTreeObj("treeDiv");
/ 獲取所有樹節點 /
var nodes = treeObj.transformToArray(treeObj.getNodes());
// 展開除第一級之外的其他節點
for (var i = 0, length1 = nodes.length; i < length_1; i++) {
if(nodes[i].level == 0){
continue;
}
nodes[i].open = true;
}
//展開第一級節點
treeObj.expandNode(nodes[0], true);
}
/S 刪除/
/
刪除前的詢問(驗證是否可以刪除)
@param treeId
@param treeNode 需要刪除的樹節點
@returns {boolean} 是否可以執行刪除函式
/
function beforeRemove(treeId, treeNode) {
var layer =getLauiLayer();
if(treeNode.level == 0){
layer.msg(“您不可以刪除根節點!請從二級節點開始操作!”,{icon:2,shade: [0.8, ‘#393D49’]})
return false;
}
if(treeNode.isParent){
layer.msg(“該目錄下面還有子目錄,請從最底層目錄開始刪除!”,{icon:2,shade: [0.8, ‘#393D49’]})
return false;
}
//如果表格中有資料就不讓刪除
if($("#trainCourseTbody").children(“tr”).length>0){
layer.msg(“該節點已經排有課程,不允許刪除課程類別!先刪除培養方案課程!”,{icon:2,time:21000,shade: [0.8, ‘#393D49’]});
return false;
}
if(confirm(“確認刪除?”)){
return true;
}
return false;
}
/
刪除的操作
@param e 事件
@param treeId 樹的介面中的ID
@param treeNode 節點
/
function onRemove(e, treeId,treeNode) {
var layer = getLauiLayer();
var trainSchemeId = getTrainSchemeId();//培養方案編號
var typeNum = treeNode.typenum;//類別num
$.post(contextPath+"/courseType/deleteCourseType.do",{“trainSchemeId”:trainSchemeId,“typeNum”:typeNum},function (response) {
layer.msg(response,{time:21000,shade: [0.8, ‘#393D49’]},function () {
if(“刪除成功” == response){
getTypeTree();//重新生成樹
//1.清空條件
var form = $("#queryTrainCourseForm");
form.find(“input”).not("#queryTrainCourseTrainshemeId").val("");
form.find(“select”).val("");
//2.重新查詢一次
queryTrainCourseByCondition();
}
})
},‘text’)
}
/E 刪除*/
/S 編輯根節點/
/
驗證是否可以進入編輯模式
@param treeId
@param treeNode
@returns {boolean} true|false代表是否進入編輯模式
/
function beforeEditName(treeId,treeNode) {
var layer;
layui.use([‘layer’],function () {
layer = layui.layer;
});
//如果是根節點不允許編輯
if(treeNode.level == 0 ){
layer.msg(“您不能編輯根節點!”,{icon:2,shade: [0.8, ‘#393D49’]});
return false;
}
return true;
}
/
用於捕獲節點編輯名稱結束(Input 失去焦點 或 按下 Enter 鍵)之後,更新節點名稱資料之前的事件回撥函式,並且根據返回值確定是否允許更改名稱的操作
@param treeId
@param treeNode
@param newName
@param isCancel
@returns {boolean} 是否成功
/
function beforeRename(treeId,treeNode, newName,isCancel) {
var layer;
layui.use([‘layer’],function () {
layer = layui.layer;
})
if (($.trim(newName)).length < 2) {
layer.alert(“名稱不能少於2個字元!”)
return false;
}
return true;
}
/
修改名稱的操作(正經的修改傳到後臺進行操作)
@param e
@param treeId
@param treeNode
@param isCancel
/
function onRename(e, treeId,treeNode, isCancel) {
//如果選擇了取消,重新查一下樹
if(isCancel == true){
getTypeTree()
return false;
}
if(confirm(“您確認修改類別名稱?”)) {
KaTeX parse error: Expected '}', got 'EOF' at end of input: …trainSchemeId":("#trainSchemeId").val(),
“typeNum”:treeNode.typenum,
“typeName”:treeNode.typename
},
function(response){
if(response != null){
var layer;
layui.use(“layer”,function () {
layer = layui.layer;
});
layer.msg(response,{shade: [0.8, ‘#393D49’],time:21000,icon:1},function () {
if(“修改成功”==response){
getTypeTree();//修改成功之後重新查一下樹
}
})
}
}
,
‘text’);
}else {//如果選擇了取消重新查一下樹
getTypeTree();//取消之後重新查樹
}
}
/**E 編輯根節點/
/S 點選事件/
/
點選事件
@param e 事件
@param treeId 樹節點的ID
@param treeNode 樹節點
/
function clickNode(e, treeId,treeNode) {
$("#trainCourseTypeNum").val(treeNode.typenum);//向隱藏的課程類別編號賦值(最後新增到表單中傳到後臺儲存)
$("#trainCourseTypeName").val(treeNode.typename);//
$("#typeNum_0").val(treeNode.typenum);//向隱藏的課程類別編號賦值
// queryTrainCourseByCondition();//分頁查詢培養方案課程資訊
clearConditionAndQueryTrainCourse();
}
/E 點選事件/
/
增加一個課程類別事件(自定義元件),用於當滑鼠移動到節點上時,顯示使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
@param treeId 樹節點在介面的編號
@param treeNode 樹節點
*/
function addHoverDom(treeId,treeNode) {
//1.初始化layer模組
var layer;
layui.use([‘layer’],function () {
layer = layui.layer;
})
//2.
var sObj = $("#"+ treeNode.tId+ “_span”);
if (treeNode.editNameFlag|| $("#addBtn"+ treeNode.tId).length > 0)
return;
var addStr = “”;
sObj.after(addStr);
var btn = KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲addBtn"+ treeNo…("#trainCourseTbody").children(“tr”).length>0){
layer.msg(“該節點已經排有課程,不允許新增課程類別!”,{icon:2,time:21000,shade: [0.8, ‘#393D49’]});
return;
}
if(confirm(“確認在類別 “+name+” 下新增新的類別?”)){
//1.向隱藏的地方賦值
$(".clear-input").val("");//清空殘留的資料
$("#addType_uptypenum").val(typenum);//上級編號
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲add_trainingsch…("#trainSchemeId").val());//培養方案編號
$("#addType_upTypeName").val(name);//上級類別名稱
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲addType_remark"…(window).width()0.80+‘px’, (’#addTypeModal’)
});
//向頁面隱藏index
$("#hidden_addType_index").val(index);
}
});
}
/
用於當滑鼠移出節點時,隱藏使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
@param treeId
@param treeNode
/
function removeHoverDom(treeId,treeNode) {
$("#addBtn_" + treeNode.tId).unbind().remove();
}
/S 左邊樹相關操作*/
相關文章
- 【ztree系列】節點的增刪改
- layer彈框刪除ztree節點非阻塞問題解決
- Ztree + PHP 無限級節點遞迴查詢PHP遞迴
- onnx 增刪改查,修改節點,刪除節點,修改input,output
- jQuery zTree 展示樹形表格jQuery
- ztree樹形選單demo
- 圍繞DOM元素節點的增刪改查
- 【轉】JavaScript對Json節點的增刪改JavaScriptJSON
- ztree樹外掛(支援三態)
- java zTree非同步載入實戰Java非同步
- 轉:zTree高階入門:如何通過擴充套件節點的屬性來達到是否顯示節點的刪除編輯等圖示(按鈕)...套件
- Tree樹狀圖的動態增刪查改(中)新增節點
- zTree外掛常鍵用法簡單介紹
- 使用 zTree 右鍵選單功能的總結
- ZTree樹和layui框架整合的demo 獲取動態資料實現增刪改查(只展現前臺部分,後臺邏輯自己寫)UI框架
- Oracle 10g 增刪節點Oracle 10g
- jQuery的ztree仿windows檔案新建和拖拽效果jQueryWindows
- 增刪改查
- asp.net中利用jquery zTree非同步載入資料ASP.NETjQuery非同步
- layerUI框架下 ztree刪除按鈕取消實現( layer.confirm confirm beforeRemove onRemove)UI框架REM
- indexedDB 增刪改查Index
- SQL增刪改查SQL
- 文件的增刪改
- mysql增刪改查MySql
- Mongoose查增改刪Go
- FMDB增刪改查
- mysql增查刪改MySql
- 資料夾管理工具(MVC+zTree+layer)(附原始碼)MVC原始碼
- layui的增刪改查UI
- sql指令,增,刪,查,改SQL
- EFCore之增刪改查
- 資料的增刪改
- 列表的增刪改查
- 字典的增刪改查
- redist的增刪改查Redis
- Mybatis的增刪改查MyBatis
- mysql基本增刪改查MySql
- MongoDB增刪改查操作MongoDB