From 1c7194ded3ec4fb1ea9f0ba48d411bbfc8acc407 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B4=A4=E5=BF=83?=
<3277200+sentsim@users.noreply.github.com>
Date: Sun, 15 Jun 2025 16:04:58 +0800
Subject: [PATCH] =?UTF-8?q?fix(tabs):=20=E4=BC=98=E5=8C=96=20`getHeaderIte?=
=?UTF-8?q?m`=20=E7=AD=89=E6=96=B9=E6=B3=95=E7=9A=84=20`index`=20=E5=8F=82?=
=?UTF-8?q?=E6=95=B0=E7=9A=84=E7=B1=BB=E5=9E=8B=E6=A3=80=E6=B5=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/tabs/index.md | 6 +++---
src/modules/tabs.js | 33 +++++++++++++++++++--------------
2 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/docs/tabs/index.md b/docs/tabs/index.md
index f919214b..de26219a 100644
--- a/docs/tabs/index.md
+++ b/docs/tabs/index.md
@@ -136,7 +136,7 @@ tabs.add('test', {
`tabs.close(id, index, force)`
- 参数 `id` : 组件的实例 ID
-- 参数 `index` : 标签索引或标签的 `lay-id` 属性值
+- 参数 `index` : 若传入 number 类型,则为标签索引;若传入 string 类型,则为标签的 `lay-id` 属性值
- 参数 `force` : 是否强制关闭。若设置 `true` 将忽略 `beforeClose` 事件行为。默认 `false`
该方法用于关闭指定的标签项。
@@ -224,7 +224,7 @@ console.log(data);
`tabs.getHeaderItem(id, index)`
- 参数 `id` : 组件的实例 ID
-- 参数 `index` : 标签索引或标签的 `lay-id` 属性值
+- 参数 `index` : 若传入 number 类型,则为标签索引;若传入 string 类型,则为标签的 `lay-id` 属性值
该方法用于获取标签头部项元素。
@@ -238,7 +238,7 @@ var headerItem = tabs.getHeaderItem('test', 'abc'); // 获取 lay-id="abc" 的
`tabs.getBodyItem(id, index)`
- 参数 `id` : 组件的实例 ID
-- 参数 `index` : 标签索引或标签的 `lay-id` 属性值 2.11.2+
+- 参数 `index` : 若传入 number 类型,则为标签索引;若传入 string 类型,则为标签的 `lay-id` 属性值 2.11.2+
该方法用于获取标签内容项元素。
diff --git a/src/modules/tabs.js b/src/modules/tabs.js
index 9ae8b1e1..ca188943 100644
--- a/src/modules/tabs.js
+++ b/src/modules/tabs.js
@@ -662,30 +662,35 @@ layui.define('component', function(exports) {
Class.prototype.findHeaderItem = function(index) {
var container = this.getContainer();
var headerItems = container.header.items;
- var headerItem = headerItems.filter('[lay-id="'+ index +'"]');
- return headerItem[0] ? headerItem : headerItems.eq(index);
+
+ // 根据 lay-id 匹配
+ if (typeof index === 'string') {
+ return headerItems.filter('[lay-id="'+ index +'"]');
+ }
+
+ return headerItems.eq(index);
};
/**
* 获取标签内容项
- * @param {number} index - 标签索引或 lay-id
+ * @param {number|string} index - 标签索引或 lay-id
*/
Class.prototype.findBodyItem = function(index) {
var container = this.getContainer();
var bodyItems = container.body.items;
- var bodyItem = bodyItems.filter('[lay-id="'+ index +'"]');
- return bodyItem[0] ? bodyItem : function() {
- // 若未匹配到 lay-id 对应内容项,则继续匹配对应头部项
- var headerItems = container.header.items;
- var headerItem = headerItems.filter('[lay-id="'+ index +'"]');
+ // 根据 lay-id 匹配
+ if (typeof index === 'string') {
+ var bodyItem = bodyItems.filter('[lay-id="'+ index +'"]');
+ return bodyItem[0] ? bodyItem : function() {
+ // 若未匹配到 lay-id 对应内容项,则通过对应头部项的索引匹配内容项
+ var headerItems = container.header.items;
+ var headerItem = headerItems.filter('[lay-id="'+ index +'"]');
+ return bodyItems.eq(headerItem.index());
+ }();
+ }
- if (headerItem[0]) {
- index = headerItem.index();
- }
-
- return bodyItems.eq(index);
- }();
+ return bodyItems.eq(index);
};
/**