
* feat: 重构 laytpl,增强对更多复杂模板结构的解析能力 * Squashed commit of the following: commit6884f80378
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 14:45:58 2025 +0800 release: v2.10.1 commit8d643ad6dc
Merge:5521e48c
213fe5a2
Author: corededitor <107152508+corededitor@users.noreply.github.com> Date: Wed Mar 19 14:24:50 2025 +0800 feat: Merge pull request #2566 from layui/feat/component feat: 优化 component, tabs 若干功能 commit213fe5a209
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 14:15:39 2025 +0800 docs: 添加 component 文档中实验性选项标记 commit5521e48c05
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 14:10:46 2025 +0800 fix: 修复 `body` 初始 `line-height` 无效的问题 (#2569) commit8c7cf0f606
Author: 青崖 <33601030+bxjt123@users.noreply.github.com> Date: Wed Mar 19 14:10:08 2025 +0800 优化 checkbox 标签风格选中且禁用时的显示 (#2563) commit23b21254d4
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 14:04:44 2025 +0800 docs: Squashed commit of the following: commit95a0503f41
Merge:e6eb86ba
87ba4c43
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 14:03:13 2025 +0800 Merge branch 'main' into 2.x commite6eb86bacb
Author: morning-star <26325820+Sight-wcg@users.noreply.github.com> Date: Wed Mar 19 14:02:05 2025 +0800 docs(slider): 修正错别字 (#2578) commit46f7a9783e
Merge:df1fc4f4
c204590a
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Fri Mar 14 19:07:50 2025 +0800 Merge branch 'main' into 2.x commitdf1fc4f419
Author: itletu <itletu@163.com> Date: Mon Mar 10 13:54:06 2025 +0800 docs: 更正 class 公共类文档错误 (#2544) | layui-border-box | 设置元素及其所有子元素均为 `box-sizing: border-box` 模型的容器 | commit87ba4c4394
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 13:41:33 2025 +0800 docs(version): 优化 2.9.x 锚点 commita0f533f0fd
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 13:37:29 2025 +0800 docs: 修复 tabs 文档示例异常问题 commit0f0584e2ed
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 13:35:00 2025 +0800 docs: 修复 tabs 文档中自定义事件示例重新点击 Preview 失效的问题 commit172957d243
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Wed Mar 19 13:29:09 2025 +0800 docs: 优化文档中的用词细节 (#2571) commit094be4ddcc
Author: letianpailove <113023596+letianpailove@users.noreply.github.com> Date: Wed Mar 19 13:28:46 2025 +0800 fix: 更正 class 公共类文档错误 (#2562) commit53ded26cb9
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Sun Mar 16 00:15:25 2025 +0800 fix: 优化 tabs 重载时未按照传入的 closable 正确渲染可关闭状态 commitbd892bf87e
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Sun Mar 16 00:15:17 2025 +0800 feat(component): 新增 cache 原型方法,用于元素缓存操作 commit6ccc5a453d
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Sun Mar 16 00:14:18 2025 +0800 fix(component): 优化元素 lay-options 属性上的配置在重载时的优先级 commit79b0a56f50
Author: 贤心 <3277200+sentsim@users.noreply.github.com> Date: Sun Mar 16 00:13:55 2025 +0800 fix(component): 修复 reload 时传入的选项未正确合并的问题 * refactor(laytpl): 优化代码细节 * docs: 重写 laytpl 模块文档
14 KiB
title | toc |
---|---|
选项卡组件 tab | true |
选项卡组件
📣 升级提示:我们在 2.10 版本中新增了全新的 tabs 标签页组件,用于替代原
element
模块中的tab
组件,建议过渡到全新的 tabs 组件,旧的tab组件将在后续合适的版本中移除。 前往全新 tabs 组件
选项卡组件
tab
是指可进行标签页切换的一段容器,常广泛应用于 Web 页面。由于为了向下兼容等诸多历史原因,在 2.x 版本中,tab
组件属于element
模块的子集。
示例
风格
tab 组件提供了三种 UI 风格,分别为:
风格 | className |
---|---|
默认风格 | class="layui-tab" |
简约风格 | class="layui-tab layui-tab-brief" |
卡片风格 | class="layui-tab layui-tab-card" |
默认风格
<div class="layui-tab"> <ul class="layui-tab-title"> <li class="layui-this">标签1</li> <li>标签2</li> <li>标签3</li> <li>标签4</li> <li>标签5</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> <!-- import layui -->
简约风格
<div class="layui-tab layui-tab-brief"> <ul class="layui-tab-title"> <li class="layui-this">标签1</li> <li>标签2</li> <li>标签3</li> <li>标签4</li> <li>标签5</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> <!-- import layui -->
卡片风格
<div class="layui-tab layui-tab-card"> <ul class="layui-tab-title"> <li class="layui-this">标签1</li> <li>标签2</li> <li>标签3</li> <li>标签4</li> <li>标签5</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> <!-- import layui -->
API
API | 描述 |
---|---|
var element = layui.element | 获得 element 模块。 |
element.render('tab', filter) | 渲染 tab 组件 |
element.tabAdd(filter, options) | 添加 tab 选项 |
element.tabDelete(filter, layid, force) | 删除 tab 选项 |
element.tabChange(filter, layid, force) | 切换 tab 选项 |
element.tab(options) | 绑定自定义 tab 元素 |
元素属性
属性 | 描述 |
---|---|
lay-allowclose | 是否开启删除图标。设置在 tab 容器 <ul class="layui-tab"> 上。 2.9.11+: 若需要单独关闭某一个选项卡的删除图标,可在选项卡标题元素 <li> 上设置 lay-allowclose="false" |
lay-id | tab 选项唯一 ID,一般用于外部对 tab 的删除和切换等操作。设置在 tab 中的 <li> 元素上。在外部附加选项卡拖拽排序时,layui-tab-item 元素也要设置 ID |
开启删除
<div class="layui-tab" lay-allowclose="true"> <ul class="layui-tab-title"> <li class="layui-this" lay-allowclose="false">标签1</li> <li>标签2</li> <li>标签3</li> <li>标签4</li> <li>标签5</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show">单独设置「标签1」不允许删除 <sup>2.9.11+</sup></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> <!-- import layui -->
渲染 tab
element.render('tab', filter);
- 参数
'tab'
是渲染 tab 的固定值。 - 参数
filter
: 对应 tab 容器lay-filter
的属性值或2.9.15+指定元素的 jQuery 对象。
tab 组件会在元素加载完毕后,自动对 tab 元素完成一次渲染,因此该方法主要用于对动态插入的 tab 元素的初始化渲染。
<div id="test"></div>
<!-- import layui -->
<script>
layui.use(function(){
var element = layui.element;
var $ = layui.$;
// 动态插入 tab 元素
$('#test').html(`
<div class="layui-tab" lay-filter="demo-filter-tab">
<!-- … -->
</div>
`);
// 渲染 tab 组件
element.render('tab', 'demo-filter-tab');
});
</script>
添加 tab
element.tabAdd(filter, options);
- 参数
filter
: tab 容器(class="layui-tab"
)的lay-filter
属性值 - 参数
options
: 添加 tab 时的属性选项,见下表:
options | 描述 | 类型 | 默认 |
---|---|---|---|
title | 选项卡的标题 | string | - |
content | 选项卡的内容,支持传入 html |
string | - |
id | 选项卡标题元素的 lay-id 属性值 |
string | - |
change | 是否添加 tab 完毕后即自动切换 | boolean | false |
allowClose 2.9.11+ | 是否开启删除图标 | boolean | false |
该方法用于添加 tab 选项。用法详见 : #示例
删除 tab
element.tabDelete(filter, layid, force);
- 参数
filter
: tab 容器(class="layui-tab"
)的lay-filter
属性值 - 参数
layid
: 选项卡标题元素的lay-id
属性值 - 参数
force
2.9.21+ : 是否强制删除 tab。若设置true
将忽略tabBeforeDelete
事件行为。默认false
该方法用于删除 tab 选项。用法详见 : #示例
切换 tab
element.tabChange(filter, layid, force);
- 参数
filter
: tab 容器(class="layui-tab"
)的lay-filter
属性值 - 参数
layid
: 选项卡标题元素的lay-id
属性值 - 参数
force
2.9.15+ : 是否强制执行 tab 切换。设置true
将忽略tabBeforeChange
事件行为。默认false
该方法用于切换到对应的 tab 选项。用法详见 : #示例
自定义 tab
element.tab(options);
- 参数
options
: 属性选项,见下表:
options | 描述 | 类型 |
---|---|---|
headerElem | 指定自定义的 tab 头元素项选择器 | string / DOM |
bodyElem | 指定自定义的 tab 主题内容元素项选择器 | string / DOM |
该方法用于绑定自定义 tab 元素(即非 class="layui-tab
定义的结构)。示例如下:
<style> .demo-tab-header .layui-btn.layui-this{border-color: #1E9FFF; color: #1E9FFF;} .demo-tab-body>div{display: none;} </style> <!-- 任意自定义的 tab 元素 --> <div class="demo-tab-header layui-btn-container" id="tabHeader"> <button class="layui-btn layui-btn-primary layui-this">标签1</button> <button class="layui-btn layui-btn-primary">标签2</button> <button class="layui-btn layui-btn-primary">标签3</button> </div> <div class="demo-tab-body" id="tabBody"> <div class="layui-show">内容-1</div> <div>内容-2</div> <div>内容-3</div> </div> <!-- import layui --> <script> layui.use(function(){ var element = layui.element; // 绑定自定义的 tab 元素 element.tab({ headerElem: '#tabHeader>.layui-btn', bodyElem: '#tabBody>div' }); }); </script>
事件
tab 切换事件
element.on('tab(filter)', callback);
- 参数
tab(filter)
是一个特定结构。tab
为 tab 切换事件固定值;filter
为 tab 容器属性lay-filter
对应的值。
- 参数
callback
为事件执行时的回调函数,并返回一个object
类型的参数。
点击 tab 选项切换时触发。#参考示例
var element = layui.element;
// tab 切换事件
element.on('tab(filter)', function(data){
console.log(this); // 当前 tab 标题所在的原始 DOM 元素
console.log(data.index); // 得到当前 tab 项的所在下标
console.log(data.elem); // 得到当前的 tab 容器
console.log(data.id); // 得到当前的 tab ID(2.9.11+)
});
tab 切换前的事件 2.9.15+
element.on('tabBeforeChange(filter)', callback);
- 参数
tabBeforeChange(filter)
是一个特定结构。tabBeforeChange
为 tab 切换前事件固定值;filter
为 tab 容器属性lay-filter
对应的值。
- 参数
callback
为事件执行时的回调函数,并返回一个object
类型的参数。
点击 tab 选项切换前触发。
var element = layui.element;
// tab 切换前的事件
element.on('tabBeforeChange(filter)', function(data){
console.log(data.elem); // 得到当前的 tab 容器
console.log(data.from.index); // 得到切换前的 tab 项所在下标
console.log(data.from.id); // 得到切换前的 tab 项所在ID
console.log(data.to.index); // 得到切换后的 tab 项所在下标
console.log(data.to.id); // 得到切换后的 tab 项所在ID
if(data.to.id === 'home') return false; // 返回 false 时阻止切换到对应的选项卡
});
tab 删除事件
element.on('tabDelete(filter)', callback);
- 参数
tabDelete(filter)
是一个特定结构。tabDelete
为 tab 删除事件固定值;filter
为 tab 容器属性lay-filter
对应的值。
- 参数
callback
为事件执行时的回调函数,并返回一个object
类型的参数。
点击 tab 选项删除时触发。
var element = layui.element;
// tab 删除事件
element.on('tabDelete(filter)', function(data){
console.log(data.index); // 得到被删除的 tab 项的所在下标
console.log(data.elem); // 得到当前的 tab 容器
console.log(data.id); // 得到被删除的 tab 项的 ID(2.9.11+)
});
tab 删除前的事件 2.9.11+
element.on('tabBeforeDelete(filter)', callback);
- 参数
tabBeforeDelete(filter)
是一个特定结构。tabBeforeDelete
为 tab 删除前事件固定值;filter
为 tab 容器属性lay-filter
对应的值。
- 参数
callback
为事件执行时的回调函数,并返回一个object
类型的参数。
点击 tab 选项删除前触发。 示例:
<div class="layui-tab" lay-allowclose="true" lay-filter="test-tabs"> <ul class="layui-tab-title"> <li lay-id="1" class="layui-this">标签1</li> <li lay-id="2">标签2</li> <li lay-id="3">标签3</li> <li lay-id="4">标签4</li> <li lay-id="5">标签5</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show">删除标签,弹出确认提示框</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> <!-- import layui --> <script> layui.use(function(){ var layer = layui.layer; var element = layui.element; // tab 删除前的事件 element.on('tabBeforeDelete(test-tabs)', function(data){ console.log(data.index); // 得到被删除的 tab 项的所在下标 console.log(data.elem); // 得到当前的 tab 容器 console.log(data.id); // 得到被删除的 tab 项的 ID(2.9.11+) // 确认删除 layer.confirm(`确认删除【${this.innerText}】吗?`, function (index) { element.tabDelete('test-tabs', data.id, true); // 确认后强制删除 - 2.9.21+ layer.close(index); }); return false; // 返回 false 时阻止默认删除选项卡行为 }); }); </script>