bootstrap中tab页动态增加和关闭

html如下:

<button onclick="add_tab()">add</button> 
<div id="editor_div" style="background: var(--bs-gray-900);">
                <ul class="nav nav-tabs focus-ring" role="tablist" id="editor_header" style="background: var(--bs-gray-dark);"></ul>
                <div class="tab-content" id="editor_content"></div>
            </div>

javascript如下:

function add_tab(result, fileName) {

    var tabsElement = $('#editor_div');
    var tabsUlElement = tabsElement.find('ul');

    // the panel id is a timestamp plus a random number from 0 to 10000
    var tabUniqueId = new Date().getTime() + Math.floor(Math.random() * 10000);
    // create a navigation bar item for the new panel
    var newTabNavElement = $('<li class="nav-item " role="presentation" id="panel_nav_' + tabUniqueId + '"><a class="nav-link " role="tab" data-bs-toggle="tab" href="#editor_' + tabUniqueId + '">' + fileName + '<svg  onclick="close_editor(' + tabUniqueId + ')" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" style="background: var(--bs-gray-700);"><path d="M6.2253 4.81108C5.83477 4.42056 5.20161 4.42056 4.81108 4.81108C4.42056 5.20161 4.42056 5.83477 4.81108 6.2253L10.5858 12L4.81114 17.7747C4.42062 18.1652 4.42062 18.7984 4.81114 19.1889C5.20167 19.5794 5.83483 19.5794 6.22535 19.1889L12 13.4142L17.7747 19.1889C18.1652 19.5794 18.7984 19.5794 19.1889 19.1889C19.5794 18.7984 19.5794 18.1652 19.1889 17.7747L13.4142 12L19.189 6.2253C19.5795 5.83477 19.5795 5.20161 19.189 4.81108C18.7985 4.42056 18.1653 4.42056 17.7748 4.81108L12 10.5858L6.2253 4.81108Z" fill="currentColor"></path></svg></a></li>');

    // add the new nav item to the DOM
    tabsUlElement.append(newTabNavElement);

    // create a new panel DOM
    var newTabPanelElement = $('#editor_content');



    var tabIndex = $('#editor_div ul li').index($('#panel_nav_' + tabUniqueId));

    console.log('tabIndex: ' + tabIndex);




    // create the editor dom
    var newEditorElement = $('<div class="tab-pane  editor" role="tabpanel" style="padding-bottom: 0px;" id="editor_' + tabUniqueId + '"><textarea class="invisible" style="display: block;"></textarea></div>');

    newTabPanelElement.append(newEditorElement);

    var modelist = ace.require('ace/ext/modelist');
    var modeName = modelist.getModeForPath(fileName).mode;


    var triggerEl = document.querySelector('#editor_header a[href="#editor_' + tabUniqueId + '"]')
    var tab = new bootstrap.Tab(triggerEl)
    tab.show();




    editor = ace.edit('editor_' + tabUniqueId);

    editor.setTheme("ace/theme/vibrant_ink");
    // var StatusBar = ace.require("ace/ext/statusbar").StatusBar;
    // create a simple selection status indicator
    //var statusBar = new StatusBar(editor, document.getElementById("statusBar"));
    //editor.getSession().setMode("ace/mode/html");
    //editor.session.setMode("ace/mode/html");

    editor.session.setMode("ace/mode/matlab", function () {
        // LoadColorPicker()
    })


    editor.session.setValue(result);
    //editors数组
    editors.push({ id: tabUniqueId, instance: editor });
    
}

//关闭标签页
function close_editor(tabUniqueId) {



    for (let i = 0; i < editors.length; i++) {
        if (editors[i].id == tabUniqueId)
            editors.splice(i, 1);
    }


    $('#editor_div').find('#panel_nav_' + tabUniqueId).remove();
    $('#editor_div').find('#editor_' + tabUniqueId).remove();
    //展示editors最后一个tab页
    if (editors.length != 0) {

        var triggerEl = document.querySelector('#editor_header a[href="#editor_' + editors[editors.length - 1].id + '"]')
        var tab = new bootstrap.Tab(triggerEl)
        tab.show();

    }

}

tab分页显示ace代码编辑器的效果: c84d6c92f72048aab0019ed81ea6b9e0.png

使用 Bootstrap 实现 Tab 标签切换和添加内容信息以 iframe 的形式呈现,需要做如下步骤: 1.创建 HTML 文件,引入 Bootstrap 和 jQuery 库,以及一个用于显示 Tab 标签的容器和多个 Tab 标签。 ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tab Demo</title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <ul class="nav nav-tabs"> <li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li> <li><a href="#tab2" data-toggle="tab">Tab 2</a></li> <li><a href="#tab3" data-toggle="tab">Tab 3</a></li> <li><a href="#" data-toggle="modal" data-target="#myModal">添加</a></li> </ul> <div class="tab-content"> <div class="tab-pane active" id="tab1"> <iframe src="https://www.baidu.com"></iframe> </div> <div class="tab-pane" id="tab2"> <iframe src="https://www.sina.com.cn"></iframe> </div> <div class="tab-pane" id="tab3"> <iframe src="https://www.qq.com"></iframe> </div> </div> </div> <!-- 模态框 --> <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">添加标签</h4> </div> <div class="modal-body"> <form> <div class="form-group"> <label for="tabName">标签名</label> <input type="text" class="form-control" id="tabName" placeholder="请输入标签名"> </div> <div class="form-group"> <label for="tabUrl">链接地址</label> <input type="text" class="form-control" id="tabUrl" placeholder="请输入链接地址"> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">取消</button> <button type="button" class="btn btn-primary" id="addTabBtn">添加</button> </div> </div> </div> </div> <script> $(function() { // 添加标签 $('#addTabBtn').click(function() { var tabName = $('#tabName').val(); var tabUrl = $('#tabUrl').val(); if (tabName && tabUrl) { // 生成新标签HTML 代码 var tabHtml = '<li><a href="#' + tabName + '" data-toggle="tab">' + tabName + '</a></li>'; var contentHtml = '<div class="tab-pane" id="' + tabName + '"><iframe src="' + tabUrl + '"></iframe></div>'; // 添加新标签和内容 $('.nav-tabs').append(tabHtml); $('.tab-content').append(contentHtml); // 关闭模态框 $('#myModal').modal('hide'); } }); // 显示第一个标签 $('.nav-tabs a:first').tab('show'); }); </script> </body> </html> ``` 2.在 Tab 标签使用 iframe 标签来显示内容信息。 3.在添加按钮使用 Bootstrap 的模态框组件来显示一个表单,以便用户输入新的标签名称和链接地址。 4.在 JavaScript 处理添加标签的逻辑。当用户点击添加按钮时,获取表单的标签名称和链接地址,生成新的 Tab 标签HTML 代码,并将新的标签和内容添加到。 通过以上步骤,我们就可以使用 Bootstrap 实现 Tab 标签切换和添加内容信息以 iframe 的形式呈现。用户可以通过点击标签来切换内容,也可以通过添加按钮来添加新的标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fireAj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值