layui-tree實(shí)現(xiàn)Ajax異步請求后動態(tài)添加節(jié)點(diǎn)的方法
最近在弄一個產(chǎn)品分類管理,是一個樹形菜單的形式,用的是layui-tree ,由于它并沒有動態(tài)添加節(jié)點(diǎn),所以只能自己剛了。
大概效果如圖

體的實(shí)現(xiàn)是當(dāng)我鼠標(biāo)移入“長袖”這個分類時(shí),出現(xiàn)三個icon (如圖),按“增加”按鈕,會發(fā)送ajax異步請求到后臺,在數(shù)據(jù)庫庫中增加以“長袖”為父類id 的一個子分類,成功后返回到前臺,然后相應(yīng)的節(jié)點(diǎn)下動態(tài)添加子節(jié)點(diǎn),主要是通過append 來增加html元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>多級分類管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="format-detection" content="telephone=no">
<link rel="stylesheet" type="text/css"
href="layui/css/layui.css" rel="external nofollow" media="all">
</head>
<style>
.panel {
margin-bottom: 0;
}
i{
cursor: pointer !important ;
cursor: hand !important;
}
body{
}
a:hover{
background-color:#E6E6E6 ;
}
.active{
background:#E6E6E6;
}
.hide{
display:none;
}
</style>
<body style="height:100%;">
<div style="height:100%;">
<div class="panel panel-default"
style=" position:fixed; width: 250px; height:800px; overflow:auto;">
<div class="panel-body" style=" ">
<h4 style="text-align: center;">分類管理</h4>
<ul unselectable="on" id="demo"
style="margin-top: 30px; -moz-user-select: none; -webkit-user-select: none;"
onselectstart="return false;" ></ul>
<button id="addcate" class="layui-btn layui-btn-primary" style="margin-top:20px; margin-left:28px; width:70%;">添加分類</button>
</div>
</div>
</div>
<script type="text/javascript" src="layui/layui.js"></script>
<script type="text/javascript">
layui.use(['jquery','layer','element','form','tree'],function(){
window.jQuery = window.$ = layui.jquery;
window.layer = layui.layer;
var form = layui.form;
var elem = layui.element;
var topcateid=0; //為模擬頂級分類id用
//初始化layer.tree
var tree = layui.tree({
elem: '#demo',
nodes:[] //這里可以通過后臺獲?。ㄈ鏣hinkPHP框架則可以通過后臺拼接好,再生成模板變量類似{$tree}就可以)
});
window.onload=function(){
//刪除layui-tree 自帶的樣式
$("i.layui-tree-branch").remove();
$("i.layui-tree-leaf").remove();
//添加操作的圖標(biāo)(即鼠標(biāo)劃過時(shí)顯示的添加,修改,刪除的按鈕組)
$("ul#demo").find("a").after("<i class='layui-icon add select hide ' )'></i>"+
"<i class='layui-icon edit select hide'></i>"+
"<i class='layui-icon del select hide'></i>");
}
//添加頂級分類
$("#addcate").on("click",function(){
layer.prompt({title: '輸入分類名稱,并確認(rèn)', formType:0}, function(text, index){
layer.close(index);
//TODO 可以ajax到后臺操作,這里只做模擬
layer.load(2);
setTimeout(function(){
layer.closeAll("loading");
//手動添加節(jié)點(diǎn),肯定有更好的方法=.=!這里的方法感覺有點(diǎn)LOW
// li里面的pid屬性為父級類目的id,頂級分類的pid為0
topcateid= topcateid+1;
$("ul#demo").append("<li pid='0' id="+(topcateid)+">"+
"<a ><cite>"+text+"</cite> </a>"+
"<i class='layui-icon select hide add'></i>"+
"<i class='layui-icon edit select hide'></i>"+
"<i class='layui-icon del select hide'></i>"+
"</li>");
},1000)
});
})
//顯示/隱藏 分類的操作欄
$("ul#demo").on({
mouseover: function(event) {
event.stopPropagation();
$(this).children(".select").removeClass("hide")
},
mouseout: function(event) {
event.stopPropagation();
$(this).children(".select").addClass("hide")
},
},"li","a")
//添加子分類
$("ul#demo ").on("click","li .add",function(){
var pid = $(this).closest("li").attr("id");//將父級類目的id作為父類id
var that= $(this).closest("li");
layer.prompt({title: '輸入子分類名稱,并確認(rèn)', formType:0}, function(text, index){
layer.close(index);
//TODO 可以ajax到后臺操作,這里只做模擬
layer.load(2);
setTimeout(function(){
layer.closeAll("loading");
topcateid= topcateid+1;
if(that.children("ul").length == 0){
//表示要新增 i 以及 ul 標(biāo)簽
that.prepend('<i class="layui-icon layui-tree-spread"></i>')
that.append("<ul class='layui-show'><li pid="+pid+" id="+(topcateid)+"><a ><cite>"+text+"</cite> </a><i class='layui-icon select hide add' )'></i> <i class='layui-icon edit select hide'></i> <i class='layui-icon del select hide'></i></li></ul>")
}else{
that.children("ul").append("<li pid="+pid+" id="+(topcateid)+"><a ><cite>"+text+"</cite> </a><i class='layui-icon select hide add' )'></i> <i class='layui-icon edit select hide'></i> <i class='layui-icon del select hide'></i></li>");
}
},1000)
});
})
//重命名
$("ul#demo ").on("click","li .edit",function(){
var node=$(this).parent().children("a").children("cite");
var id=$(this).parent().attr("id")
var that= $(this).closest("li");
layer.prompt({title: '輸入新的分類名稱,并確認(rèn)',value:node.text(), formType:0}, function(text, index){
layer.close(index);
//TODO 可以ajax到后臺操作,這里只做模擬
layer.load(2);
setTimeout(function(){
layer.closeAll("loading");
node.text(text);
},1000)
});
})
//刪除分類
$("ul#demo ").on("click","li .del",function(){
var that= $(this).closest("li");
if(that.children("ul").length > 0){
layer.msg("該分類下含有子分類不能刪除")
return;
}
var id=$(this).parent().attr("id")
layer.confirm('確定要刪除?該分類下的課程亦將刪除!', {
btn: ['刪除','取消']
}, function(){
//TODO 可以ajax到后臺操作,這里只做模擬
layer.load(2);
setTimeout(function(){
layer.closeAll("loading");
if((that.parent("ul").children("li").length == 1)&&(that.parent("ul").parent("li").children("i.layui-tree-spread").length=1)){
//要把分類名前的三角符號和ul標(biāo)簽刪除
that.parent("ul").parent("li").children("i.layui-tree-spread").remove();
}
that.remove()
},1000)
});
})
//打開/關(guān)閉菜單
$("ul#demo").on({
click:function(event){
event.stopPropagation();
event.preventDefault();
if( $(this).parent().children("ul").hasClass("layui-show")){
$(this).html("");
$(this).parent().children("ul").removeClass("layui-show");
return;
}else{
$(this).html("");
$(this).parent().children("ul").addClass("layui-show");
return;
}
return;
}
}, 'i.layui-tree-spread');
});
</script>
</body>
</html>
以上這篇layui-tree實(shí)現(xiàn)Ajax異步請求后動態(tài)添加節(jié)點(diǎn)的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
探索JavaScript函數(shù)的無限可能(函數(shù)基本概念)
JavaScript中的函數(shù)是一種重要的編程概念,它允許我們封裝可重用的代碼塊,并在需要時(shí)進(jìn)行調(diào)用,本文將深入介紹JavaScript函數(shù)的各個方面,包括函數(shù)定義和調(diào)用、參數(shù)和返回值、作用域和閉包、高階函數(shù)以及常見的函數(shù)應(yīng)用場景,感興趣的朋友一起看看吧2023-08-08
基于javascript實(shí)現(xiàn)右下角浮動廣告效果
這篇文章主要介紹了基于javascript實(shí)現(xiàn)右下角浮動廣告效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01
Javascript讀取上傳文件內(nèi)容/類型/字節(jié)數(shù)
這篇文章主要為大家詳細(xì)介紹了Javascript讀取上傳文件內(nèi)容/類型/字節(jié)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
JS簡單操作select和dropdownlist實(shí)例
這篇文章主要介紹了JS簡單操作select和dropdownlist的方法,以實(shí)例形式講述了js針對服務(wù)器控件select和dropdownlist的讀寫操作方法,是js與.net交互的典型應(yīng)用實(shí)例,需要的朋友可以參考下2014-11-11
js數(shù)組高階函數(shù)之includes()方法總結(jié)
JS的數(shù)組是一種特殊的對象,其特點(diǎn)是在值的列表中按照順序存放值,在 JS中,數(shù)組是由中括號 [] 括起來的數(shù)值序列,本篇文章給大家介紹js數(shù)組高階函數(shù)——includes()方法,感興趣的朋友一起看看吧2023-12-12
JS實(shí)現(xiàn)圖片預(yù)加載之無序預(yù)加載功能代碼
這篇文章主要介紹了JS實(shí)現(xiàn)圖片預(yù)加載之無序預(yù)加載功能代碼,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
JavaScript之Getters和Setters 平臺支持等詳細(xì)介紹
現(xiàn)在,JavaScript的Getters和Setters使用非常廣泛,它和每個JavaScript開發(fā)者的切身利益息息相關(guān),我們先來快速了解什么是Getters和Setters,以及它們?yōu)槭裁春苡杏?然后,我們來看看現(xiàn)在都有哪些平臺支持Gettets和Setters2012-12-12

