Layui折叠面板可通过DOM查询或事件委托动态维护展开ID数组,推荐后者;手风琴模式下需清空前数组再添加新ID,避免依赖change回调。

Layui 折叠面板( 利用 如果需要实时响应、避免重复查询 DOM,可维护一个全局数组,在用户点击时更新: 当启用手风琴模式( 添加 id 属性,例如:user-info、order-setting,避免纯数字或重复值data-index 或 lay-id —— 折叠面板没有这些属性,它们属于 Tab 或其他组件通过 DOM 查询获取当前展开项的 ID 列表
.layui-colla-content:visible 的可见性判断最稳定(比查 class 更可靠):
$('.layui-colla-item .layui-colla-content:visible').closest('.layui-colla-item').map(function() { return this.id; }).get();
Array.from(document.querySelectorAll('.layui-colla-content')).filter(el => getComputedStyle(el).height !== '0px').map(el => el.closest('.layui-colla-item')?.id).filter(id => id);
['panel-1', 'panel-3', 'config-advanced']
监听点击并动态维护展开 ID 状态(推荐用于交互频繁场景)
const expandedPanelIds = [];
$(document).on('click', '.layui-colla-title', function() {<br> const $item = $(this).closest('.layui-colla-item');<br> const id = $item.attr('id');<br> if (!id) return;<br> const $content = $(this).next('.layui-colla-content');<br> setTimeout(() => {<br> if ($content.is(':visible')) {<br> if (!expandedPanelIds.includes(id)) expandedPanelIds.push(id);<br> } else {<br> const i = expandedPanelIds.indexOf(id);<br> if (i > -1) expandedPanelIds.splice(i, 1);<br> }<br> }, 0);<br>});
expandedPanelIds 获取最新状态注意 accordion 模式下的特殊逻辑
accordion: true)时,每次点击只会有一个面板展开:
expandedPanelIds.length = 0;,再 push 新 IDchange 回调来同步——它只在手风琴切换时触发,且不区分展开/收起,也不适用于非手风琴模式











