layui-tree實現(xiàn)Ajax異步請求后動態(tài)添加節(jié)點的方法
最近在弄一個產(chǎn)品分類管理,是一個樹形菜單的形式,用的是layui-tree ,由于它并沒有動態(tài)添加節(jié)點,所以只能自己剛了。
大概效果如圖
體的實現(xiàn)是當我鼠標移入“長袖”這個分類時,出現(xiàn)三個icon (如圖),按“增加”按鈕,會發(fā)送ajax異步請求到后臺,在數(shù)據(jù)庫庫中增加以“長袖”為父類id 的一個子分類,成功后返回到前臺,然后相應的節(jié)點下動態(tài)添加子節(jié)點,主要是通過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:[] //這里可以通過后臺獲取(如ThinkPHP框架則可以通過后臺拼接好,再生成模板變量類似{$tree}就可以) }); window.onload=function(){ //刪除layui-tree 自帶的樣式 $("i.layui-tree-branch").remove(); $("i.layui-tree-leaf").remove(); //添加操作的圖標(即鼠標劃過時顯示的添加,修改,刪除的按鈕組) $("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: '輸入分類名稱,并確認', formType:0}, function(text, index){ layer.close(index); //TODO 可以ajax到后臺操作,這里只做模擬 layer.load(2); setTimeout(function(){ layer.closeAll("loading"); //手動添加節(jié)點,肯定有更好的方法=.=!這里的方法感覺有點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: '輸入子分類名稱,并確認', 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 標簽 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: '輸入新的分類名稱,并確認',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標簽刪除 that.parent("ul").parent("li").children("i.layui-tree-spread").remove(); } that.remove() },1000) }); }) //打開/關閉菜單 $("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實現(xiàn)Ajax異步請求后動態(tài)添加節(jié)點的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
探索JavaScript函數(shù)的無限可能(函數(shù)基本概念)
JavaScript中的函數(shù)是一種重要的編程概念,它允許我們封裝可重用的代碼塊,并在需要時進行調用,本文將深入介紹JavaScript函數(shù)的各個方面,包括函數(shù)定義和調用、參數(shù)和返回值、作用域和閉包、高階函數(shù)以及常見的函數(shù)應用場景,感興趣的朋友一起看看吧2023-08-08Javascript讀取上傳文件內容/類型/字節(jié)數(shù)
這篇文章主要為大家詳細介紹了Javascript讀取上傳文件內容/類型/字節(jié)數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04js數(shù)組高階函數(shù)之includes()方法總結
JS的數(shù)組是一種特殊的對象,其特點是在值的列表中按照順序存放值,在 JS中,數(shù)組是由中括號 [] 括起來的數(shù)值序列,本篇文章給大家介紹js數(shù)組高階函數(shù)——includes()方法,感興趣的朋友一起看看吧2023-12-12JavaScript之Getters和Setters 平臺支持等詳細介紹
現(xiàn)在,JavaScript的Getters和Setters使用非常廣泛,它和每個JavaScript開發(fā)者的切身利益息息相關,我們先來快速了解什么是Getters和Setters,以及它們?yōu)槭裁春苡杏?然后,我們來看看現(xiàn)在都有哪些平臺支持Gettets和Setters2012-12-12