亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

layui遞歸實(shí)現(xiàn)動(dòng)態(tài)左側(cè)菜單

 更新時(shí)間:2019年07月26日 09:54:01   作者:執(zhí)丶筆  
這篇文章主要為大家詳細(xì)介紹了layui遞歸實(shí)現(xiàn)動(dòng)態(tài)左側(cè)菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了layui遞歸實(shí)現(xiàn)動(dòng)態(tài)左側(cè)菜單的具體代碼,供大家參考,具體內(nèi)容如下

我知道兩種方式實(shí)現(xiàn):

一、先加載所有的主菜單,之后通過(guò)點(diǎn)擊主菜單在加載該菜單的子菜單(缺點(diǎn),如果判斷是否已經(jīng)加載過(guò),那么動(dòng)態(tài)添加了菜單,這里顯示不出來(lái),不判斷的話,每次點(diǎn)擊都會(huì)請(qǐng)求一次,這樣請(qǐng)求的次數(shù)就太多了,服務(wù)器不太好的話可能會(huì)成為高并發(fā)的一個(gè)原因)

二、就是以下的了,使用遞歸一次性全部加載出來(lái)(缺點(diǎn),耗費(fèi)服務(wù)器內(nèi)存)

如果動(dòng)態(tài)添加一個(gè)菜單,你當(dāng)前頁(yè)面不手動(dòng)刷新菜單不會(huì)顯示,這個(gè)問(wèn)題可以考慮用websocket實(shí)現(xiàn)

首先是service層如何獲取所有的菜單(主菜單和所有的子菜單)

 /**
 *獲取所有菜單
 **/
 @Override
 public List<MeunInfo> getParentMeun() {
 //獲取所有的菜單(包括子菜單和父級(jí)菜單)
 List<MeunInfo> list = meunDao.getParentMeun();
 //創(chuàng)建一個(gè)集合用于保存所有的主菜單
 List<MeunInfo> rootMeun=new ArrayList<>();
 //遍歷所有菜單集合,如果是主菜單的話直接放入rootMeun集合
 for (MeunInfo info:list){
 //判斷為0是因?yàn)槲业闹鞑藛螛?biāo)識(shí)是0
 if (info.getMeunParent()==0){
 rootMeun.add(info);
 }
 }
 
 
 //這個(gè)是遍歷所有主菜單,分別獲取所有主菜單的所有子菜單
 for (MeunInfo info:rootMeun){
 //獲取所有子菜單 遞歸
 List<MeunInfo> childrenList=getchildrenMeun(info.getId(),list);
 //這個(gè)是實(shí)體類中的子菜單集合
 info.setChildrenList(childrenList);
 }
 return rootMeun;
 }
 
/**
* 遞歸獲取子菜單(這個(gè)我也不太理解,copy過(guò)去就行)
**/
public List<MeunInfo> getchildrenMeun(int id,List<MeunInfo> allMeun){
 //用于保存子菜單
 List<MeunInfo> childrenList=new ArrayList<>();
 for (MeunInfo info: allMeun){
 //判斷當(dāng)前的菜單標(biāo)識(shí)是否等于主菜單的id
 if(info.getMeunParent()==id){
 //如果是的話 就放入主菜單對(duì)象的子菜單集合
 childrenList.add(info);
 }
 }
 
 //這里就是遞歸了,遍歷所有的子菜單
 for (MeunInfo info:childrenList){
 info.setChildrenList(getchildrenMeun(info.getId(),allMeun));
 }
 
 //如果子菜單為空的話,那就說(shuō)明某菜單下沒(méi)有子菜單了,直接返回空,子菜單為空的話就不會(huì)繼續(xù) 
 //迭代了
 if(childrenList!=null && childrenList.size()==0){
 return null;
 }
 return childrenList;
 }

接下來(lái)是實(shí)體類

 //菜單id
 private int id;
 //菜單標(biāo)題
 private String meunTitle;
 //菜單地址
 private String meunUrl;
 //菜單狀態(tài)
 private int meunStatus;
 //菜單標(biāo)識(shí)
 private int meunParent;
 //菜單排序
 private int meunSort;
 //子菜單集合
 private List<MeunInfo> childrenList;
 
 //get set 省略

之后你可以測(cè)試,可以拿到結(jié)果,這個(gè)自行測(cè)試

界面代碼(注意這里我是用的是layui)

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <link rel="stylesheet" href="css/layui.css" >
 <style type="text/css">
 #index-container,html,body{
 margin:0px;
 padding:0px;
 }
 #index-container{
 width:100%;
 height:auto;
 
 }
 
 #index-navigationbar{
 width:100%;
 height:60px;
 }
 
 #index-navigationbar ul{
 padding-left:77%;
 }
 
 #index-commonmenu{
 width: 15%;
 height:519px;
 float: left;
 }
 #indixe-tab{
 width:84.9%;
 height: 150px;
 float: right;
 }
 </style>
</head>
<body>
 <!--首頁(yè)容器-->
 <div id="index-container">
 <!--信息菜單-->
 <div id="index-navigationbar">
 <ul class="layui-nav" style="text-algin:right;background-color: black;">
 <li class="layui-nav-item">
  <a href="">控制臺(tái)<span class=" layui-badge">9</span></a>
 </li>
 <li class="layui-nav-item">
  <a href="">個(gè)人中心<span class=" layui-badge-dot"></span></a>
 </li>
 <li class="layui-nav-item" lay-unselect="">
  <a href="javascript:;" ><img src="http://t.cn/RCzsdCq" class="layui-nav-img">我</a>
  <dl class="layui-nav-child">
  <dd><a href="javascript:;" >修改信息</a></dd>
  <dd><a href="javascript:;" >安全管理</a></dd>
  <dd><a href="javascript:;" >退了</a></dd>
  </dl>
 </li>
 </ul>
 </div>
 
 <!--操作菜單-->
 <div id="index-commonmenu">
 <ul class="layui-nav layui-nav-tree" lay-filter="demo" style="margin-right:10px;height:538px;">
 <!-- <li class="layui-nav-item">
  <a href="javascript:;" >筆記管理</a>
  <dl class="layui-nav-child">
  <dd><a href="javascript:;" meun_id=1>筆記列表</a></dd>
  <dd><a href="javascript:;" >分享列表</a></dd>
  </dl>
 </li>
 <li class="layui-nav-item">
  <a href="javascript:;" >解決方案</a>
  <dl class="layui-nav-child">
  <dd>
  <a href="javascript:;" >其他</a>
  <dl class="layui-nav-child">
  <dd><a href="javascript:;" >三級(jí)菜單</a></dd>
  </dl>
  </dd>
  <dd><a href="">后臺(tái)模版</a></dd>
  <dd><a href="">電商平臺(tái)</a></dd>
  </dl>
 </li>
 <li class="layui-nav-item"><a href="javascript:;" >云市場(chǎng)</a></li>
 <li class="layui-nav-item"><a href="javascript:;" >社區(qū)</a></li>-->
 </ul>
 </div>
 
 <!--頁(yè)面選項(xiàng)卡-->
 <div id="indixe-tab">
 <div class="layui-tab" lay-allowClose="true" lay-filter="demo1" style="margin:0px;padding:0px;">
 <ul class="layui-tab-title">
 
 </ul>
 <div class="layui-tab-content" style="margin:0px;padding:0px;">
 
 </div>
 </div>
 </div>
 
 <div style="clear: both"></div>
 
 </div>
</body>
</html>
<script type="text/javascript" src="/layui.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
 //注意:導(dǎo)航 依賴 element 模塊,否則無(wú)法進(jìn)行功能性操作
 layui.use('element', function(){
 var $ = layui.jquery
 ,element = layui.element;
 
 element.on('nav(demo)', function(elem){
 //console.log(elem.getAttribute("meun_id")); //得到當(dāng)前點(diǎn)擊的DOM對(duì)象
 var id=$(this).attr("meun_id");
 if(typeof(id)!="undefined"){
 console.log('進(jìn)入方法');
 element.tabAdd('demo1', {
  title: '新選項(xiàng)'+ (Math.random()*1000|0) //用于演示
  ,content: '<iframe src="test.html" style="width:100%;height:491px;" scrolling="auto" frameborder="0"></iframe>'
  ,id: id//實(shí)際使用一般是規(guī)定好的id,這里以時(shí)間戳模擬下z
 })
 element.tabChange('demo1', id);
 }
 });
 //獲取所有的菜單
 $.ajax({
 type:"GET",
 url:"http://localhost:8080/test",
 dataType:"json",
 success:function(data){
 //先添加所有的主材單
 $.each(data,function(i,obj){
  var content='<li class="layui-nav-item">';
  content+='<a href="javascript:;" >'+obj.meunTitle+'</a>';
  //這里是添加所有的子菜單
  content+=loadchild(obj);
  content+='</li>';
  $(".layui-nav-tree").append(content);
 });
 element.init();
 },
 error:function(jqXHR){
 aler("發(fā)生錯(cuò)誤:"+ jqXHR.status);
 }
 });
 
 //組裝子菜單的方法
 function loadchild(obj){
 if(obj==null){
 return;
 }
 
 var content='';
 if(obj.childrenList!=null && obj.childrenList.length>0){
 content+='<dl class="layui-nav-child">';
 }else{
 content+='<dl>';
 }
 
 if(obj.childrenList!=null && obj.childrenList.length>0){
 $.each(obj.childrenList,function(i,note){
  content+='<dd>';
  content+='<a href="javascript:;" >'+note.meunTitle+'</a>';
  if(note.childrenList==null){
  return;
  }
  content+=loadchild(note);
  content+='</dd>';
 });
 
 content+='</dl>';
 }
 console.log(content);
 return content;
 }
 });
</script>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript中的canvas?實(shí)現(xiàn)一個(gè)圓環(huán)漸變倒計(jì)時(shí)效果

    JavaScript中的canvas?實(shí)現(xiàn)一個(gè)圓環(huán)漸變倒計(jì)時(shí)效果

    這篇文章主要介紹了JavaScript中的canvas?實(shí)現(xiàn)一個(gè)圓環(huán)漸變倒計(jì)時(shí)效果,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 在實(shí)例中重學(xué)JavaScript事件循環(huán)

    在實(shí)例中重學(xué)JavaScript事件循環(huán)

    這篇文章主要介紹了在實(shí)例中重學(xué)JavaScript事件循環(huán),幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-12-12
  • js 彈出菜單/窗口效果

    js 彈出菜單/窗口效果

    想象一下,你把一個(gè)重要內(nèi)容放在一個(gè)彈出窗口,又不聚集到這個(gè)窗口。讓使用屏幕閱讀器的同學(xué)情何以堪,只有當(dāng)他們 tab 到這頁(yè)面結(jié)束,還繼續(xù) tab,才可能找到這個(gè)彈窗
    2011-10-10
  • echarts3 使用總結(jié)(繪制各種圖表,地圖)

    echarts3 使用總結(jié)(繪制各種圖表,地圖)

    本篇文章主要介紹了echarts3 使用總結(jié),詳細(xì)的介紹了各種柱狀圖、折線圖、餅圖、全國(guó)地圖等的實(shí)現(xiàn)代碼,有需要的可以了解一下。
    2017-01-01
  • 不用AI也能實(shí)現(xiàn)的文字自動(dòng)播報(bào)(SpeechSynthesis文本實(shí)例合成)

    不用AI也能實(shí)現(xiàn)的文字自動(dòng)播報(bào)(SpeechSynthesis文本實(shí)例合成)

    SpeechSynthesis是HTML5的一個(gè)新特性,基于SpeechSynthesis可以實(shí)現(xiàn)在客戶瀏覽器端進(jìn)行動(dòng)態(tài)文本的語(yǔ)音合成播放,這篇文章主要介紹了不用AI也能實(shí)現(xiàn)的文字自動(dòng)播報(bào)(SpeechSynthesis文本實(shí)例合成),需要的朋友可以參考下
    2023-03-03
  • uniapp中使用videojs構(gòu)建H5直播播放器

    uniapp中使用videojs構(gòu)建H5直播播放器

    這篇文章主要為大家介紹了uniapp中使用videojs構(gòu)建H5直播播放器實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 淺談Webpack核心模塊tapable解析

    淺談Webpack核心模塊tapable解析

    這篇文章主要介紹了淺談Webpack核心模塊tapable解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 微信小程序?qū)崿F(xiàn)文字無(wú)限輪播效果

    微信小程序?qū)崿F(xiàn)文字無(wú)限輪播效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)文字無(wú)限輪播效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • JS中style.display和style.visibility的區(qū)別實(shí)例說(shuō)明

    JS中style.display和style.visibility的區(qū)別實(shí)例說(shuō)明

    下面的例子說(shuō)明了這種區(qū)別:在這個(gè)例子中,divContent1和divContent2隱藏的時(shí)候用的是style.display=none,這時(shí)候,后面的div會(huì)向上移動(dòng),占據(jù)已經(jīng)隱藏的div的空間。divContent3和divContent4用的是style.visibility=hidden來(lái)隱藏,但是其隱藏后仍然占據(jù)原來(lái)的空間
    2013-03-03
  • 關(guān)于JavaScript中高階函數(shù)的魅力詳解

    關(guān)于JavaScript中高階函數(shù)的魅力詳解

    高階函數(shù):英文叫Higher-order function。JavaScript的函數(shù)其實(shí)都指向某個(gè)變量。下面這篇文章主要給大家介紹了關(guān)于JavaScript中高階函數(shù)的魅力,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09

最新評(píng)論