【问题标题】:jQuery Bootstrap Dynamic Tabs (Add & Remove)jQuery Bootstrap 动态选项卡(添加和删除)
【发布时间】:2023-08-05 08:31:01
【问题描述】:

我的代码使用户能够在 Bootstrap UI 选项卡中添加和删除选项卡。我已经成功了,是的,效果很好。

唯一的问题是它不对选项卡名称进行排序。例如有这样的标签:Tab 1Tab 2Tab 3Tab 4Tab 5

所以当我删除 Tab 2 时,Tab 3 将是 Tab 2 然后 Tab 4 将是 Tab 3 等等..

另外,当我删除一个选项卡时,一个活动选项卡会显示选项卡 1。(请在 jsfiddle 中查看)

我的两个问题有什么解决办法吗?

JSFiddle 链接:https://jsfiddle.net/cnycmLq0/

<div class="container">
    <div class="row">
        <div class="col-md-12">
            <p>
                <button id="btn-add-tab" type="button" class="btn btn-primary pull-right">Add Tab</button>
            </p>
            <!-- Nav tabs -->
            <ul id="tab-list" class="nav nav-tabs" role="tablist">
                <li class="active"><a href="#tab1" role="tab" data-toggle="tab">Tab 1</a></li>
            </ul>

            <!-- Tab panes -->
            <div id="tab-content" class="tab-content">
                <div class="tab-pane fade in active" id="tab1">Tab 1 content</div>
            </div>
        </div>
    </div>
</div>

JS:

    $(document).ready(function() {
        var tabID = 1;
        $('#btn-add-tab').click(function() {
            tabID++;
            $('#tab-list').append($('<li><a href="#tab' + tabID + '" role="tab" data-toggle="tab">Tab ' + tabID + '<button class="close" type="button" title="Remove this page">×</button></a></li>'));
            $('#tab-content').append($('<div class="tab-pane fade" id="tab' + tabID + '">Tab ' + tabID + ' content</div>'));
        });
        $('#tab-list').on('click', '.close', function() {
            var tabID = $(this).parents('a').attr('href');
            $(this).parents('li').remove();
            $(tabID).remove();

            //display first tab
            var tabFirst = $('#tab-list a:first');
            tabFirst.tab('show');
        });

        var list = document.getElementById("tab-list");
    });

【问题讨论】:

    标签: jquery twitter-bootstrap tabs


    【解决方案1】:

    我刚刚写了一个function 来重置您的tabs 并更改它的text。主要部分是将button html 存储在var 中,并将button htmltabID 作为全局变量。您可以在 remove 事件上调用此 function

    var button='<button class="close" type="button" title="Remove this page">×</button>';
    var tabID = 1;
    function resetTab(){
        var tabs=$("#tab-list li:not(:first)");//get all tabs except first tab
        var len=1;//we do not want to reset 1st tab
        $(tabs).each(function(k,v){
            len++;//increment it
            $(this).find('a').html('Tab ' + len + button); //replace each tabs html with latest index and button html.
        })
        tabID--;//decrement tabs count
    }
    

    Complete solution in Fiddle

    【讨论】:

    • 谢谢!有用。但是当我看到你的代码有问题时。例如,我添加了 3 个选项卡。 Then I removed Tab 2, so Tab 3 will be Tab 2. But when Tab 2 (old Tab 3) is active, it shows the content of Tab 3. Also, how can I go to the previous tab when tab is removed rather than转到第一个标签?
    • 我猜这是有效的.. 因为如果你要删除 tab2 你实际上也不需要这些内容.. 所以tab3 将基本上是实际的tab 代替@987654337 @ 及其内容有效...
    • 看看这个:jsfiddle.net/cnycmLq0/4我已经更新了,修复了内容。但是当我删除最后一个标签时,它并没有显示它的内容。你能帮帮我吗?
    • 因为tab有重复的ids..给我一些时间..我会回来修复它..
    • @Jacob.. 我还有一个疑问...你介意解释一下吗?
    最近更新 更多