layui-tree實(shí)現(xiàn)Ajax異步請(qǐng)求后動(dòng)態(tài)添加節(jié)點(diǎn)的方法
最近在弄一個(gè)產(chǎn)品分類管理,是一個(gè)樹形菜單的形式,用的是layui-tree ,由于它并沒有動(dòng)態(tài)添加節(jié)點(diǎn),所以只能自己剛了。
大概效果如圖
體的實(shí)現(xiàn)是當(dāng)我鼠標(biāo)移入“長(zhǎng)袖”這個(gè)分類時(shí),出現(xiàn)三個(gè)icon (如圖),按“增加”按鈕,會(huì)發(fā)送ajax異步請(qǐng)求到后臺(tái),在數(shù)據(jù)庫(kù)庫(kù)中增加以“長(zhǎng)袖”為父類id 的一個(gè)子分類,成功后返回到前臺(tái),然后相應(yīng)的節(jié)點(diǎn)下動(dòng)態(tài)添加子節(jié)點(diǎn),主要是通過append 來增加html元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>多級(jí)分類管理</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; //為模擬頂級(jí)分類id用 //初始化layer.tree var tree = layui.tree({ elem: '#demo', nodes:[] //這里可以通過后臺(tái)獲?。ㄈ鏣hinkPHP框架則可以通過后臺(tái)拼接好,再生成模板變量類似{$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>"); } //添加頂級(jí)分類 $("#addcate").on("click",function(){ layer.prompt({title: '輸入分類名稱,并確認(rèn)', formType:0}, function(text, index){ layer.close(index); //TODO 可以ajax到后臺(tái)操作,這里只做模擬 layer.load(2); setTimeout(function(){ layer.closeAll("loading"); //手動(dòng)添加節(jié)點(diǎn),肯定有更好的方法=.=!這里的方法感覺有點(diǎn)LOW // li里面的pid屬性為父級(jí)類目的id,頂級(jí)分類的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");//將父級(jí)類目的id作為父類id var that= $(this).closest("li"); layer.prompt({title: '輸入子分類名稱,并確認(rèn)', formType:0}, function(text, index){ layer.close(index); //TODO 可以ajax到后臺(tái)操作,這里只做模擬 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到后臺(tái)操作,這里只做模擬 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('確定要?jiǎng)h除?該分類下的課程亦將刪除!', { btn: ['刪除','取消'] }, function(){ //TODO 可以ajax到后臺(tái)操作,這里只做模擬 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)){ //要把分類名前的三角符號(hào)和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異步請(qǐng)求后動(dòng)態(tài)添加節(jié)點(diǎn)的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
探索JavaScript函數(shù)的無限可能(函數(shù)基本概念)
JavaScript中的函數(shù)是一種重要的編程概念,它允許我們封裝可重用的代碼塊,并在需要時(shí)進(jìn)行調(diào)用,本文將深入介紹JavaScript函數(shù)的各個(gè)方面,包括函數(shù)定義和調(diào)用、參數(shù)和返回值、作用域和閉包、高階函數(shù)以及常見的函數(shù)應(yīng)用場(chǎng)景,感興趣的朋友一起看看吧2023-08-08基于javascript實(shí)現(xiàn)右下角浮動(dòng)廣告效果
這篇文章主要介紹了基于javascript實(shí)現(xiàn)右下角浮動(dòng)廣告效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01Javascript讀取上傳文件內(nèi)容/類型/字節(jié)數(shù)
這篇文章主要為大家詳細(xì)介紹了Javascript讀取上傳文件內(nèi)容/類型/字節(jié)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04JS簡(jiǎn)單操作select和dropdownlist實(shí)例
這篇文章主要介紹了JS簡(jiǎn)單操作select和dropdownlist的方法,以實(shí)例形式講述了js針對(duì)服務(wù)器控件select和dropdownlist的讀寫操作方法,是js與.net交互的典型應(yīng)用實(shí)例,需要的朋友可以參考下2014-11-11js數(shù)組高階函數(shù)之includes()方法總結(jié)
JS的數(shù)組是一種特殊的對(duì)象,其特點(diǎn)是在值的列表中按照順序存放值,在 JS中,數(shù)組是由中括號(hào) [] 括起來的數(shù)值序列,本篇文章給大家介紹js數(shù)組高階函數(shù)——includes()方法,感興趣的朋友一起看看吧2023-12-12JS實(shí)現(xiàn)圖片預(yù)加載之無序預(yù)加載功能代碼
這篇文章主要介紹了JS實(shí)現(xiàn)圖片預(yù)加載之無序預(yù)加載功能代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05JavaScript之Getters和Setters 平臺(tái)支持等詳細(xì)介紹
現(xiàn)在,JavaScript的Getters和Setters使用非常廣泛,它和每個(gè)JavaScript開發(fā)者的切身利益息息相關(guān),我們先來快速了解什么是Getters和Setters,以及它們?yōu)槭裁春苡杏?然后,我們來看看現(xiàn)在都有哪些平臺(tái)支持Gettets和Setters2012-12-12