目录:
1.什么是选项卡:
在layui中,选项卡(Tab)是一种常用的页面布局元素,用于在同一页面上展示多个内容区域并切换显示。选项卡通常由一组水平或垂直的标签(Tab)和对应的内容区域组成。
在layui中,可以使用element
模块的tab
方法来实现选项卡功能。具体使用步骤如下:
通过下面这些代码可以形成一个简单的选项卡:
- 引入layui库文件和相关样式:
<link rel="stylesheet" href="layui/css/layui.css"> <script src="layui/layui.js"></script>
2.创建HTML结构,定义标签和内容区域:
<div class="layui-tab"> <ul class="layui-tab-title"> <li class="layui-this">Tab1</li> <li>Tab2</li> <li>Tab3</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show">内容1</div> <div class="layui-tab-item">内容2</div> <div class="layui-tab-item">内容3</div> </div> </div>
3.调用layui的选项卡方法进行初始化:
layui.use(['element'], function(){ var element = layui.element; // 初始化选项卡 element.tab(); });
2.layui选项卡:
1.把选项卡嵌入到项目里面(还没有优化的 ):
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="common/header.jsp" %> <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>后台主页</title> </head> <body> <div class="layui-layout layui-layout-admin"> <div class="layui-header"> <div class="layui-logo layui-hide-xs layui-bg-black">layout demo</div> <!-- 头部区域(可配合layui 已有的水平导航) --> <ul class="layui-nav layui-layout-left"> <!-- 移动端显示 --> <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-header-event="menuLeft"> <i class="layui-icon layui-icon-spread-left"></i> </li> <!-- Top导航栏 --> <li class="layui-nav-item layui-hide-xs"><a href="">nav 1</a></li> <li class="layui-nav-item layui-hide-xs"><a href="">nav 2</a></li> <li class="layui-nav-item layui-hide-xs"><a href="">nav 3</a></li> <li class="layui-nav-item"> <a href="javascript:;">nav groups</a> <dl class="layui-nav-child"> <dd><a href="">menu 11</a></dd> <dd><a href="">menu 22</a></dd> <dd><a href="">menu 33</a></dd> </dl> </li> </ul> <!-- 个人头像及账号操作 --> <ul class="layui-nav layui-layout-right"> <li class="layui-nav-item layui-hide layui-show-md-inline-block"> <a href="javascript:;"> <img src="//tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg" class="layui-nav-img"> tester </a> <dl class="layui-nav-child"> <dd><a href="">Your Profile</a></dd> <dd><a href="">Settings</a></dd> <dd><a href="login.jsp">Sign out</a></dd> </dl> </li> <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect> <a href="javascript:;"> <i class="layui-icon layui-icon-more-vertical"></i> </a> </li> </ul> </div> <div class="layui-side layui-bg-black"> <div class="layui-side-scroll"> <!-- 左侧导航区域(可配合layui已有的垂直导航) --> <ul id="menu" class="layui-nav layui-nav-tree" lay-filter="menu"> </ul> </div> </div> <div class="layui-body"> <!-- 内容主体区域 --> <div class="layui-tab" lay-filter="demo" lay-allowclose="true"> <ul class="layui-tab-title"> <li class="layui-this" lay-id="11">网站设置</li> <li lay-id="22">用户管理</li> <li lay-id="33">权限分配</li> <li lay-id="44">商品管理</li> <li lay-id="55">订单管理</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show">内容1</div> <div class="layui-tab-item">内容2</div> <div class="layui-tab-item">内容3</div> <div class="layui-tab-item">内容4</div> <div class="layui-tab-item">内容5</div> </div> </div> </div> <div class="layui-footer"> <!-- 底部固定区域 --> 底部固定区域 </div> </div> <script> //JS layui.use(['element', 'layer', 'util'], function(){ var element = layui.element ,layer = layui.layer ,util = layui.util ,$ = layui.$; $.ajax({ url:"${pageContext.request.contextPath }/permission.action?methodName=menus", dataType:'json', success:function(data){ console.log(data); var htmlStr=''; $.each(data,function(i,n){ htmlStr +=' <li class="layui-nav-item layui-nav-itemed">'; htmlStr +='<a class="" href="javascript:;">'+n.text+'</a>'; if(n.hasChildren){ var children= n.children; htmlStr +=' <dl class="layui-nav-child">'; $.each(children,function(idx,node){ htmlStr +=' <dd><a href="javascript:;">'+node.text+'</a></dd>'; }) htmlStr +=' </dl>'; } htmlStr +=' </li>'; }) $("#menu").html(htmlStr); element.render('menu'); } }); }); </script> </body> </html>
输出结果:
1. 将静态的选项卡转换为动态的选项卡:
2.将选项卡的标签名变成实际菜单名 :
htmlStr +=' <dd> <a href="javascript:;" onclick="openTab(\''+node.text+'\',\''+node.attributes.self.url+'\',\''+node.id+'\')"> '+node.text+'</a></dd>';
3.重名的选项卡不能打开新的:
if($node.length == 0){ //将静态的选项卡转换为动态的选项卡 element.tabAdd('demo', { title: title //用于演示 ,content: content ,id: id //实际使用一般是规定好的id,这里以时间戳模拟下 }) }
4.重名选项卡需要未选中:
如果这张表有很多字段,就用map集合,把当前表对应的数据放进map集合里面 :
所有代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="common/header.jsp" %> <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>后台主页</title> </head> <body> <div class="layui-layout layui-layout-admin"> <div class="layui-header"> <div class="layui-logo layui-hide-xs layui-bg-black">layout demo</div> <!-- 头部区域(可配合layui 已有的水平导航) --> <ul class="layui-nav layui-layout-left"> <!-- 移动端显示 --> <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-header-event="menuLeft"> <i class="layui-icon layui-icon-spread-left"></i> </li> <!-- Top导航栏 --> <li class="layui-nav-item layui-hide-xs"><a href="">nav 1</a></li> <li class="layui-nav-item layui-hide-xs"><a href="">nav 2</a></li> <li class="layui-nav-item layui-hide-xs"><a href="">nav 3</a></li> <li class="layui-nav-item"> <a href="javascript:;">nav groups</a> <dl class="layui-nav-child"> <dd><a href="">menu 11</a></dd> <dd><a href="">menu 22</a></dd> <dd><a href="">menu 33</a></dd> </dl> </li> </ul> <!-- 个人头像及账号操作 --> <ul class="layui-nav layui-layout-right"> <li class="layui-nav-item layui-hide layui-show-md-inline-block"> <a href="javascript:;"> <img src="//tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg" class="layui-nav-img"> tester </a> <dl class="layui-nav-child"> <dd><a href="">Your Profile</a></dd> <dd><a href="">Settings</a></dd> <dd><a href="login.jsp">Sign out</a></dd> </dl> </li> <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect> <a href="javascript:;"> <i class="layui-icon layui-icon-more-vertical"></i> </a> </li> </ul> </div> <div class="layui-side layui-bg-black"> <div class="layui-side-scroll"> <!-- 左侧导航区域(可配合layui已有的垂直导航) --> <ul id="menu" class="layui-nav layui-nav-tree" lay-filter="menu"> </ul> </div> </div> <div class="layui-body"> <!-- 内容主体区域 --> <!-- 3.将选项卡的标签名变成实际菜单名 --> <div class="layui-tab" lay-filter="demo" lay-allowclose="true"> <ul class="layui-tab-title"> <li class="layui-this" lay-id="11">网站设置</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show">内容1</div> </div> </div> </div> <div class="layui-footer"> <!-- 底部固定区域 --> 底部固定区域 </div> </div> <script> //JS var element,layer,util,$; layui.use(['element', 'layer', 'util'], function(){ element = layui.element ,layer = layui.layer ,util = layui.util ,$ = layui.$; $.ajax({ url:"${pageContext.request.contextPath }/permission.action?methodName=menus", dataType:'json', success:function(data){ console.log(data); var htmlStr=''; $.each(data,function(i,n){ htmlStr +=' <li class="layui-nav-item layui-nav-itemed">'; htmlStr +='<a class="" href="javascript:;">'+n.text+'</a>'; if(n.hasChildren){ var children= n.children; htmlStr +=' <dl class="layui-nav-child">'; $.each(children,function(idx,node){ // 3.将选项卡的标签名变成实际菜单名 htmlStr +=' <dd><a href="javascript:;" onclick="openTab(\''+node.text+'\',\''+node.attributes.self.url+'\',\''+node.id+'\')">'+node.text+'</a></dd>'; }) htmlStr +=' </dl>'; } htmlStr +=' </li>'; }) $("#menu").html(htmlStr); element.render('menu'); } }); }); /** * 1.参考官网是否有空间/模块能够支撑完对应功能--静态 2.将静态的选项卡转换为动态的选项卡 3.将选项卡的标签名变成实际菜单名 4.重名的选项卡不能打开新的 5.重名选项卡需要未选中 */ function openTab(title,content,id){ var $node = $('li[lay-id="'+id+'"]'); console.log($node); /* 4.重名的选项卡不能打开新的 */ if($node.length == 0){ //将静态的选项卡转换为动态的选项卡 element.tabAdd('demo', { title: title //用于演示 ,content: content ,id: id //实际使用一般是规定好的id,这里以时间戳模拟下 }) } /* 5.重名选项卡需要未选中 */ element.tabChange('demo', id); //切换到:用户管理 } </script> </body> </html>
输出结果:
3.项目重构:
先建立一个login.js和main.js:
再把login.jsp里面的内容复制到login.js:
再把main.jsp里面的内容复制到main.js:
var element,layer,util,$; layui.use(['element', 'layer', 'util'], function(){ element = layui.element ,layer = layui.layer ,util = layui.util ,$ = layui.$; $.ajax({ url:"permission.action?methodName=menus", dataType:'json', success:function(data){ console.log(data); var htmlStr=''; $.each(data,function(i,n){ htmlStr +=' <li class="layui-nav-item layui-nav-itemed">'; htmlStr +='<a class="" href="javascript:;">'+n.text+'</a>'; if(n.hasChildren){ var children= n.children; htmlStr +=' <dl class="layui-nav-child">'; $.each(children,function(idx,node){ // 3.将选项卡的标签名变成实际菜单名 htmlStr +=' <dd><a href="javascript:;" onclick="openTab(\''+node.text+'\',\''+node.attributes.self.url+'\',\''+node.id+'\')">'+node.text+'</a></dd>'; }) htmlStr +=' </dl>'; } htmlStr +=' </li>'; }) $("#menu").html(htmlStr); element.render('menu'); } }); }); /** * 1.参考官网是否有空间/模块能够支撑完对应功能--静态 2.将静态的选项卡转换为动态的选项卡 3.将选项卡的标签名变成实际菜单名 4.重名的选项卡不能打开新的 5.重名选项卡需要未选中 */ function openTab(title,content,id){ var $node = $('li[lay-id="'+id+'"]'); console.log($node); /* 4.重名的选项卡不能打开新的 */ if($node.length == 0){ //将静态的选项卡转换为动态的选项卡 element.tabAdd('demo', { title: title //用于演示 ,content: "<iframe frameborder='0' src='"+content+"' scrolling='auto' style='width:100%;height:100%;'></iframe>" ,id: id //实际使用一般是规定好的id,这里以时间戳模拟下 }) } /* 5.重名选项卡需要未选中 */ element.tabChange('demo', id); //切换到:用户管理 }
输出结果: