layui-tree实现Ajax异步请求后动态添加节点

最近在弄一个产品分类管理,是一个树形菜单的形式,用的是layui-tree ,由于它并没有动态添加节点,所以只能自己刚了。

                                                                                                        layui-tree实现Ajax异步请求后动态添加节点_第1张图片大概效果如左图

    具体的实现是当我鼠标移入“长袖”这个分类时,出现三个icon (如图),按“增加”按钮,会发送ajax异步请求到后台,在数据库库中增加以“长袖”为父类id 的一个子分类,成功后返回到前台,然后相应的节点下动态添加子节点,主要是通过append 来增加html元素

[html] view plain copy

  1. >  
  2. <html lang="en">  
  3. <head>  
  4. <meta charset="UTF-8">  
  5. <title>多级分类管理title>  
  6. <meta name="renderer" content="webkit">  
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">  
  8. <meta name="format-detection" content="telephone=no">  
  9. <link rel="stylesheet" type="text/css"  
  10.     href="layui/css/layui.css" media="all">  
  11.   
  12. head>  
  13.   
  14. <style>  
  15. .panel {  
  16.     margin-bottom: 0;  
  17. }  
  18.  i{  
  19.       
  20.     cursor: pointer !important ;   
  21.     cursor: hand !important;  
  22.  }   
  23.  body{  
  24.   
  25.  }  
  26.   
  27.   a:hover{  
  28.     background-color:#E6E6E6 ;  
  29.  }   
  30.   
  31. .active{  
  32.     background:#E6E6E6;  
  33. }  
  34. .hide{  
  35.     display:none;  
  36. }  
  37.   
  38. style>  
  39. <body style="height:100%;">  
  40.   
  41.   
  42.   
  43.     <div    style="height:100%;">  
  44.                 <div class="panel panel-default"  
  45.                     style=" position:fixed;   width: 250px; height:800px;   overflow:auto;">  
  46.                     <div class="panel-body"  style=" ">  
  47.                         <h4 style="text-align: center;">分类管理h4>  
  48.                         <ul unselectable="on" id="demo"  
  49.                             style="margin-top: 30px; -moz-user-select: none; -webkit-user-select: none;"  
  50.                             onselectstart="return false;"  >ul>  
  51.                             <button  id="addcate" class="layui-btn  layui-btn-primary"  style="margin-top:20px; margin-left:28px; width:70%;">添加分类button>  
  52.                     div>  
  53.     div>  
  54.           
  55.       
  56.   
  57.     div>  
  58.   
  59.   
  60.     <script type="text/javascript" src="layui/layui.js">script>  
  61.     <script type="text/javascript">  
  62.     layui.use(['jquery','layer','element','form','tree'],function(){  
  63.           window.jQuery = window.$ = layui.jquery;  
  64.           window.layer = layui.layer;  
  65.           var form  =  layui.form;  
  66.           var elem = layui.element;  
  67.           var topcateid=0;  //为模拟顶级分类id用  
  68.   
  69.           //初始化layer.tree  
  70.            var tree = layui.tree({  
  71.               elem: '#demo',  
  72.               nodes:[]     //这里可以通过后台获取(如ThinkPHP框架则可以通过后台拼接好,再生成模板变量类似{$tree}就可以)  
  73.             });   
  74.             
  75.             window.onload=function(){  
  76.   
  77.                  //删除layui-tree 自带的样式      
  78.                   $("i.layui-tree-branch").remove();  
  79.                   $("i.layui-tree-leaf").remove();  
  80.                   //添加操作的图标(即鼠标划过时显示的添加,修改,删除的按钮组)  
  81.                   $("ul#demo").find("a").after("<i class='layui-icon add select hide ' )'>i>"+  
  82.                                                "<i class='layui-icon edit select hide'>i>"+  
  83.                                                "<i class='layui-icon del select hide'>i>");  
  84.             }  
  85.   
  86. //添加顶级分类  
  87.     $("#addcate").on("click",function(){  
  88.         layer.prompt({title: '输入分类名称,并确认', formType:0}, function(text, index){  
  89.               layer.close(index);  
  90.            //TODO 可以ajax到后台操作,这里只做模拟  
  91.            layer.load(2);  
  92.            setTimeout(function(){     
  93.            layer.closeAll("loading");  
  94.            //手动添加节点,肯定有更好的方法=.=!这里的方法感觉有点LOW  
  95.            // li里面的pid属性为父级类目的id,顶级分类的pid为0  
  96.            topcateidtopcateid+1;  
  97.             $("ul#demo").append("<li  pid='0' id="+(topcateid)+">"+  
  98.                                "<a ><cite>"+text+"cite> a>"+  
  99.                                "<i class='layui-icon select hide add'>i>"+  
  100.                                "<i class='layui-icon edit select hide'>i>"+  
  101.                                "<i class='layui-icon del select hide'>i>"+  
  102.                                "li>");  
  103.            },1000)  
  104.             });   
  105. })  
  106.       
  107. //显示/隐藏 分类的操作栏  
  108. $("ul#demo").on({  
  109.     mouseover: function(event) {  
  110.       event.stopPropagation();  
  111.       $(this).children(".select").removeClass("hide")  
  112.     },  
  113.       
  114.     mouseout: function(event) {   
  115.      event.stopPropagation();   
  116.      $(this).children(".select").addClass("hide")  
  117.     },   
  118.   
  119. },"li","a")  
  120.   
  121. //添加子分类  
  122. $("ul#demo ").on("click","li .add",function(){  
  123.       
  124.      var pid = $(this).closest("li").attr("id");//将父级类目的id作为父类id  
  125.      var that= $(this).closest("li");  
  126.     layer.prompt({title: '输入子分类名称,并确认', formType:0}, function(text, index){  
  127.           layer.close(index);  
  128.             
  129.            //TODO 可以ajax到后台操作,这里只做模拟  
  130.            layer.load(2);  
  131.            setTimeout(function(){     
  132.            layer.closeAll("loading");  
  133.            topcateidtopcateid+1;  
  134.            if(that.children("ul").length == 0){  
  135.                          //表示要新增   i 以及 ul 标签  
  136.                          that.prepend('<i class="layui-icon layui-tree-spread">i>')  
  137.                          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>")  
  138.                      }else{  
  139.                         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>");  
  140.                      }  
  141.            },1000)  
  142.             });     
  143.   
  144.               
  145. })  
  146. //重命名  
  147. $("ul#demo ").on("click","li .edit",function(){  
  148.    var node=$(this).parent().children("a").children("cite");  
  149.    var id=$(this).parent().attr("id")  
  150.    var that= $(this).closest("li");  
  151.     layer.prompt({title: '输入新的分类名称,并确认',value:node.text(), formType:0}, function(text, index){  
  152.           layer.close(index);  
  153.             
  154.          //TODO 可以ajax到后台操作,这里只做模拟  
  155.            layer.load(2);  
  156.            setTimeout(function(){     
  157.            layer.closeAll("loading");  
  158.             node.text(text);  
  159.            },1000)  
  160.             });   
  161.             
  162.           
  163. })  
  164. //删除分类  
  165. $("ul#demo ").on("click","li .del",function(){  
  166.       
  167.       var that= $(this).closest("li");  
  168.     if(that.children("ul").length > 0){  
  169.         layer.msg("该分类下含有子分类不能删除")  
  170.         return;  
  171.     }  
  172.    var id=$(this).parent().attr("id")  
  173.   
  174.  layer.confirm('确定要删除?该分类下的课程亦将删除!', {  
  175.   btn: ['删除','取消']   
  176. }, function(){  
  177.       
  178.          //TODO 可以ajax到后台操作,这里只做模拟  
  179.            layer.load(2);  
  180.            setTimeout(function(){     
  181.            layer.closeAll("loading");  
  182.             if((that.parent("ul").children("li").length == 1)&&(that.parent("ul").parent("li").children("i.layui-tree-spread").length=1)){  
  183.                    //要把分类名前的三角符号和ul标签删除  
  184.                     that.parent("ul").parent("li").children("i.layui-tree-spread").remove();             
  185.                }  
  186.               that.remove()  
  187.            },1000)  
  188.             });   
  189.   
  190.   
  191. })  
  192. //打开/关闭菜单  
  193.       
  194.     $("ul#demo").on({  
  195.       
  196.     click:function(event){  
  197.         event.stopPropagation();  
  198.         event.preventDefault();  
  199.         if( $(this).parent().children("ul").hasClass("layui-show")){  
  200.               
  201.       
  202.               $(this).html("");  
  203.               $(this).parent().children("ul").removeClass("layui-show");  
  204.               return;  
  205.         }else{    
  206.               
  207.           
  208.          $(this).html("");  
  209.          $(this).parent().children("ul").addClass("layui-show");   
  210.         return;  
  211.         }   
  212.        return;  
  213.     }     
  214. },  'i.layui-tree-spread');    
  215.   
  216.               
  217.  });   
  218.   
  219. script>  
  220.   
  221.   
  222.   
  223. body>  
  224.   
  225. html>  

你可能感兴趣的:(layui)