jQuery EasyUI 布局 – 动态添加标签页(Tabs)

jQuery EasyUI 布局 – 动态添加标签页(Tabs)

Tabs 组件最强大的特性之一就是支持动态添加、关闭、刷新、选中标签页。这在后台管理系统中非常常见:用户点击左侧菜单时,在右侧主内容区动态打开对应的标签页;如果标签已存在,则选中而不重复打开。

本教程将演示:

  • 动态添加标签页(支持判断是否已存在)。
  • 关闭当前/所有/其他标签页。
  • 刷新当前标签页。
  • 结合左侧 accordion + tree 菜单实现经典后台布局。

官方参考:

  • 动态 Tabs 教程:https://www.jeasyui.com/tutorial/layout/tabs2.php
  • 在线 Demo:https://www.jeasyui.com/demo/main/index.php?plugin=Tabs&pitem=Dynamic+Tabs

步骤 1: 引入 EasyUI 资源

<link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/icon.css">
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>

步骤 2: 创建整体布局 + Tabs

<body class="easyui-layout">
    <!-- 左侧菜单 -->
    <div data-options="region:'west',title:'菜单',split:true" style="width:200px;">
        <div class="easyui-accordion" data-options="fit:true,border:false">
            <div title="系统管理" iconCls="icon-setting">
                <ul id="menu-tree" class="easyui-tree">
                    <li data-url="page1.html" iconCls="icon-user">用户管理</li>
                    <li data-url="page2.html" iconCls="icon-group">角色管理</li>
                    <li data-url="page3.html" iconCls="icon-lock">权限设置</li>
                </ul>
            </div>
            <div title="内容管理" iconCls="icon-folder">
                <ul class="easyui-tree">
                    <li data-url="article.html">文章列表</li>
                    <li data-url="category.html">分类管理</li>
                </ul>
            </div>
        </div>
    </div>

    <!-- 右侧主内容区 -->
    <div data-options="region:'center'">
        <div id="main-tabs" class="easyui-tabs" data-options="fit:true,border:false,tools:'#tab-tools'">
            <div title="首页" iconCls="icon-home" style="padding:20px;">
                <h2>欢迎使用 jQuery EasyUI 管理系统</h2>
                <p>点击左侧菜单可在右侧动态打开标签页。</p>
            </div>
        </div>
    </div>

    <!-- Tabs 工具栏 -->
    <div id="tab-tools">
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-reload" plain="true" onclick="refreshTab()">刷新</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="closeCurrentTab()">关闭当前</a>
    </div>
</body>

步骤 3: JavaScript 实现动态添加标签页

<script type="text/javascript">
    // 核心函数:添加标签页(如果已存在则选中)
    function addTab(title, url, icon) {
        if ($('#main-tabs').tabs('exists', title)) {
            $('#main-tabs').tabs('select', title);
            // 可选:刷新已存在标签页
            // var tab = $('#main-tabs').tabs('getTab', title);
            // $('#main-tabs').tabs('update', {tab: tab, options: {href: url}});
        } else {
            $('#main-tabs').tabs('add', {
                title: title,
                href: url,              // AJAX 加载内容
                closable: true,
                iconCls: icon || 'icon-blank'
            });
        }
    }

    // 刷新当前标签页
    function refreshTab() {
        var tab = $('#main-tabs').tabs('getSelected');
        if (tab) {
            var url = tab.panel('options').href;
            if (url) {
                tab.panel('refresh');
            } else {
                // 如果是内联内容,可重新加载
                tab.panel('refresh', tab.panel('options').content);
            }
        }
    }

    // 关闭当前标签页
    function closeCurrentTab() {
        var tab = $('#main-tabs').tabs('getSelected');
        if (tab) {
            var index = $('#main-tabs').tabs('getTabIndex', tab);
            if (index > 0) {  // 保留首页不关闭
                $('#main-tabs').tabs('close', index);
            }
        }
    }

    // 菜单点击事件
    $(function() {
        $('#menu-tree').tree({
            onClick: function(node) {
                if (node.text && node.attributes && node.attributes.url) {
                    addTab(node.text, node.attributes.url, node.iconCls);
                } else if (node.text) {
                    // 如果没有 url 属性,可用内联内容
                    addTab(node.text, null, node.iconCls);
                    // 在这里设置 content
                    var tab = $('#main-tabs').tabs('getTab', node.text);
                    if (tab) {
                        tab.panel('body').html('<p style="padding:20px;">' + node.text + ' 的内容区域</p>');
                    }
                }
            }
        });
    });
</script>

关键说明

  • tabs('exists', title):判断标签是否已存在,避免重复打开。
  • tabs('select', title):选中已有标签。
  • tabs('add', {...}):动态添加,支持 href AJAX 加载(推荐,性能好)。
  • tab.panel('refresh'):刷新标签内容。
  • 保留首页:通常首页不可关闭(index == 0 时不关闭)。
  • 菜单数据:使用 data-urlattributes.url 存储页面地址。

扩展功能示例

// 关闭所有标签(保留首页)
function closeAllTabs() {
    var tabs = $('#main-tabs').tabs('tabs');
    for (var i = tabs.length - 1; i > 0; i--) {
        $('#main-tabs').tabs('close', i);
    }
}

// 右键菜单(可选)
$('#main-tabs').tabs({
    onContextMenu: function(e, title, index) {
        e.preventDefault();
        $('#tab-menu').menu('show', {
            left: e.pageX,
            top: e.pageY
        }).data('tabIndex', index);
    }
});

完整效果

  • 点击左侧菜单 → 在右侧动态打开对应标签页。
  • 重复点击同一菜单 → 直接切换到已打开的标签(不重复创建)。
  • 支持刷新、关闭当前标签。
  • 标签可关闭(除首页外)。

更多示例:

  • 官方动态 Tabs:https://www.jeasyui.com/tutorial/layout/tabs2.php
  • 右键菜单 Tabs:https://www.jeasyui.com/easyui/demo/tabs/contextmenu.html

如果需要完整后台模板(带登录、主题切换、iframe 加载)、右键菜单、或支持 iframe 方式加载页面,请继续提问!

文章已创建 3247

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部