layui-tree實現Ajax非同步請求後動態新增節點
最近在弄一個產品分類管理,是一個樹形選單的形式,用的是layui-tree ,由於它並沒有動態新增節點,所以只能自己剛了。
大概效果如左圖
具體的實現是當我滑鼠移入“長袖”這個分類時,出現三個icon (如圖),按“增加”按鈕,會傳送ajax非同步請求到後臺,在資料庫庫中增加以“長袖”為父類id 的一個子分類,成功後返回到前臺,然後相應的節點下動態新增子節點,主要是通過append 來增加html元素
[html] view plain copy
- <!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" 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");
- //手動新增節點,肯定有更好的方法=.=!這裡的方法感覺有點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>
相關文章
- 如何使用angularjs實現ajax非同步請求AngularJS非同步
- AJAX 非同步請求非同步
- layui-tree如何實現懶載入以及動態區域性渲染樹節點UI
- KKB : Jquery實現Ajax請求jQuery
- HDFS動態新增節點
- 利用fetch方法實現Ajax請求
- 實現傳送多個Ajax請求
- Ajax請求後臺資料
- ajax--實現非同步請求,接受響應及執行回撥非同步
- tornado非同步請求非阻塞非同步
- Ajax+SpringMVC實現跨域請求SpringMVC跨域
- ajax跨域post請求,如何實現呢跨域
- 位元組跳動面試官:請用JS實現Ajax併發請求控制面試JS
- ajax請求
- 在 DotNetty 中實現同步請求Netty
- 原生js實現Ajax請求,包含get和postJS
- iOS 同步請求 非同步請求 GET請求 POST請求iOS非同步
- 對於動態載入內容 (包括 Ajax 請求內容) 繫結點選事件事件
- ajax請求的非同步巢狀問題分析非同步巢狀
- 使用jQuery的ajax同步請求吃過的虧jQuery
- ajax請求 juery
- ajax實現的跨域請求程式碼例項跨域
- 前後端資料互動(二)——原生 ajax 請求詳解後端
- 新增表單請求後鉤子
- Hyperledger Fabric節點的動態新增和刪除
- 巧用javascript ajax,實現跨域請求外帶,增大漏洞危害JavaScript跨域
- React、Axios、MockJs實現Ajax的請求攔截ReactiOSMockJS
- PHP AJAX JSONP實現跨域請求使用例項PHPJSON跨域
- 利用JQuery實現更簡單的Ajax跨域請求jQuery跨域
- Retrofit 動態引數(非固定引數、非必須引數)(Get、Post請求)
- Java後端中的請求最佳化:從請求合併到非同步處理的實現策略Java後端非同步
- 網頁請求(Ajax)網頁
- WebForm 頁面ajax 請求後臺頁面 方法WebORM
- dTree無限級目錄樹和JQuery同步ajax請求jQuery
- jQuery實現的非同步請求程式碼例項jQuery非同步
- 使用history儲存列表頁ajax請求的狀態
- 小白來實現一個Ajax請求[Ajax使用方法及相關知識點詳細解析——超級全]
- 原生ajax請求&JSONPJSON