2016-06-14 1495 views
1

我有我的代碼,使用戶可以在Bootstrap UI選項卡中添加和刪除選項卡。我成功地做到了,是的,它運作良好。jQuery Bootstrap動態選項卡(添加和刪除)

唯一的問題是它不排序標籤名稱。例如,有標籤這樣的:Tab 1Tab 2Tab 3Tab 4Tab 5

所以,當我刪除Tab 2Tab 3Tab 2然後Tab 4Tab 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"); 
    }); 

回答

3

我剛寫了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

+0

謝謝你的!有用。但是當我看到你的代碼有問題時。例如,我添加3個選項卡。然後我刪除了標籤2,因此標籤3將是標籤2.但是當標籤2(舊標籤3)處於活動狀態時,它會顯示標籤3的內容。另外,如何刪除標籤時轉到上一個標籤,而不是去第一個標籤? – Jacob

+0

這是有效的我猜..因爲如果你刪除'tab2'你實際上不需要內容太多..所以'tab3'將基本上是實際的'tab'來代替'tab2',它的內容保持有效。 .. –

+0

看看這個:https://jsfiddle.net/cnycmLq0/4/我已經更新它,修復了內容。但是當我刪除最後一個標籤時,它不顯示它的內容。你能幫我嗎? – Jacob