2017-06-08 63 views
0

我正在開發一個功能,其中有不同的選項卡組。 我希望每一組選項卡都可以獨立運作。我的意思是:任何其他選項卡都必須干擾其他組的行爲。如何爲不同的選項卡設置單獨的行爲?

到目前爲止,我在代碼中遇到的唯一錯誤是,當您單擊第一組的任一選項卡時,其他組的選項卡的內容將消失。

而且我需要默認情況下每個集合的第一個選項卡始終處於選中狀態。

這裏是一個JSFiddle I have created.

$(document).ready(function() { 
 

 
    $('.tabs a:not(:first)').addClass('inactive'); 
 
    $('.container').hide(); 
 
    $('.tabs').next('.container').show(); 
 

 
    $('.tabs a').click(function() { 
 
    var t = $(this).attr('id'); 
 
    if ($(this).hasClass('inactive')) { //this is the start of our condition 
 
     $(this).siblings('a').addClass('inactive'); 
 
     $(this).removeClass('inactive'); 
 

 
     $(this).parent().nextAll('.container').hide(); 
 
     $('#' + t + 'C').fadeIn('slow'); 
 
    } 
 
    }); 
 

 
});
.tabs { 
 
    width: 100%; 
 
    height: 30px; 
 
    border-bottom: solid 1px #CCC; 
 
    padding-right: 2px; 
 
    margin-top: 30px; 
 
} 
 

 
a { 
 
    cursor: pointer; 
 
} 
 

 
.tabs a { 
 
    float: left; 
 
    list-style: none; 
 
    border-top: 1px solid #ccc; 
 
    border-left: 1px solid #ccc; 
 
    border-right: 1px solid #ccc; 
 
    margin-right: 5px; 
 
    border-top-left-radius: 3px; 
 
    border-top-right-radius: 3px; 
 
    outline: none; 
 
    font-family: Arial, Helvetica, sans-serif; 
 
    font-size: small; 
 
    font-weight: bold; 
 
    color: #5685bc; 
 
    ; 
 
    padding-top: 5px; 
 
    padding-left: 7px; 
 
    padding-right: 7px; 
 
    padding-bottom: 8px; 
 
    display: block; 
 
    background: #FFF; 
 
    border-top-left-radius: 3px; 
 
    border-top-right-radius: 3px; 
 
    text-decoration: none; 
 
    outline: none; 
 
} 
 

 
.tabs a.inactive { 
 
    padding-top: 5px; 
 
    padding-bottom: 8px; 
 
    padding-left: 8px; 
 
    padding-right: 8px; 
 
    color: #666666; 
 
    background: #EEE; 
 
    outline: none; 
 
    border-bottom: solid 1px #CCC; 
 
} 
 

 
.tabs a:hover, 
 
.tabs a.inactive:hover { 
 
    color: #5685bc; 
 
    outline: none; 
 
} 
 

 
.container { 
 
    clear: both; 
 
    width: 100%; 
 
    border-left: solid 1px #CCC; 
 
    border-right: solid 1px #CCC; 
 
    border-bottom: solid 1px #CCC; 
 
    text-align: left; 
 
    padding-top: 20px; 
 
} 
 

 
.container h2 { 
 
    margin-left: 15px; 
 
    margin-right: 15px; 
 
    margin-bottom: 10px; 
 
    color: #5685bc; 
 
} 
 

 
.container p { 
 
    margin-left: 15px; 
 
    margin-right: 15px; 
 
    margin-top: 10px; 
 
    margin-bottom: 10px; 
 
    line-height: 1.3; 
 
    font-size: small; 
 
} 
 

 
.container ul { 
 
    margin-left: 25px; 
 
    font-size: small; 
 
    line-height: 1.4; 
 
    list-style-type: disc; 
 
} 
 

 
.container li { 
 
    padding-bottom: 5px; 
 
    margin-left: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<div class="tabs"> 
 

 
    <a id="tab1">test1</a> 
 
    <a id="tab2">test2</a> 
 
    <a id="tab3">test3</a> 
 
    <a id="tab4">test4</a> 
 

 
</div> 
 

 
<div class="container" id="tab1C">1Some content</div> 
 
<div class="container" id="tab2C">2Some content</div> 
 
<div class="container" id="tab3C">3Some content</div> 
 
<div class="container" id="tab4C">4Some content</div> 
 

 
<div class="tabs"> 
 

 
    <a id="tab5">test1</a> 
 
    <a id="tab6">test2</a> 
 
    <a id="tab7">test3</a> 
 
    <a id="tab8">test4</a> 
 

 
</div> 
 

 
<div class="container" id="tab5C">5Some content</div> 
 
<div class="container" id="tab6C">6Some content</div> 
 
<div class="container" id="tab7C">7Some content</div> 
 
<div class="container" id="tab8C">8Some content</div> 
 

 
<div class="tabs"> 
 

 
    <a id="tab5">test1</a> 
 
    <a id="tab6">test2</a> 
 
    <a id="tab7">test3</a> 
 
    <a id="tab8">test4</a> 
 

 
</div> 
 

 
<div class="container" id="tab5C">5Some content</div> 
 
<div class="container" id="tab6C">6Some content</div> 
 
<div class="container" id="tab7C">7Some content</div> 
 
<div class="container" id="tab8C">8Some content</div>

回答

1

我已經去除了IDS和data-tab取代他們,因爲id應該是唯一的,我包裹了所有標籤,只獲取點擊範圍。

$(document).ready(function() { 
 

 
    $('.tabs a').addClass('inactive'); 
 
    $('.tabs a:first-child').removeClass('inactive'); 
 
    $('.tab-container .container').hide(); 
 
    $('.tabs').next('.container').show(); 
 

 
    $('.tabs a').on('click', function() { 
 
    var $tabContainer = $(this).parents('.tab-container'); 
 
    var tabId = $(this).data('tab'); 
 
    
 
    $tabContainer.find('.tabs a').addClass('inactive'); 
 
    $(this).removeClass('inactive'); 
 
    
 
    $tabContainer.find('.container').hide(); 
 
    $tabContainer.find('.container[data-tab="'+tabId+'"]').fadeIn('slow'); 
 
    }); 
 
});
.tabs { 
 
    width: 100%; 
 
    height: 30px; 
 
    border-bottom: solid 1px #CCC; 
 
    padding-right: 2px; 
 
    margin-top: 30px; 
 
} 
 

 
a { 
 
    cursor: pointer; 
 
} 
 

 
.tabs a { 
 
    float: left; 
 
    list-style: none; 
 
    border-top: 1px solid #ccc; 
 
    border-left: 1px solid #ccc; 
 
    border-right: 1px solid #ccc; 
 
    margin-right: 5px; 
 
    border-top-left-radius: 3px; 
 
    border-top-right-radius: 3px; 
 
    outline: none; 
 
    font-family: Arial, Helvetica, sans-serif; 
 
    font-size: small; 
 
    font-weight: bold; 
 
    color: #5685bc; 
 
    ; 
 
    padding-top: 5px; 
 
    padding-left: 7px; 
 
    padding-right: 7px; 
 
    padding-bottom: 8px; 
 
    display: block; 
 
    background: #FFF; 
 
    border-top-left-radius: 3px; 
 
    border-top-right-radius: 3px; 
 
    text-decoration: none; 
 
    outline: none; 
 
} 
 

 
.tabs a.inactive { 
 
    padding-top: 5px; 
 
    padding-bottom: 8px; 
 
    padding-left: 8px; 
 
    padding-right: 8px; 
 
    color: #666666; 
 
    background: #EEE; 
 
    outline: none; 
 
    border-bottom: solid 1px #CCC; 
 
} 
 

 
.tabs a:hover, 
 
.tabs a.inactive:hover { 
 
    color: #5685bc; 
 
    outline: none; 
 
} 
 

 
.container { 
 
    clear: both; 
 
    width: 100%; 
 
    border-left: solid 1px #CCC; 
 
    border-right: solid 1px #CCC; 
 
    border-bottom: solid 1px #CCC; 
 
    text-align: left; 
 
    padding-top: 20px; 
 
} 
 

 
.container h2 { 
 
    margin-left: 15px; 
 
    margin-right: 15px; 
 
    margin-bottom: 10px; 
 
    color: #5685bc; 
 
} 
 

 
.container p { 
 
    margin-left: 15px; 
 
    margin-right: 15px; 
 
    margin-top: 10px; 
 
    margin-bottom: 10px; 
 
    line-height: 1.3; 
 
    font-size: small; 
 
} 
 

 
.container ul { 
 
    margin-left: 25px; 
 
    font-size: small; 
 
    line-height: 1.4; 
 
    list-style-type: disc; 
 
} 
 

 
.container li { 
 
    padding-bottom: 5px; 
 
    margin-left: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<div class="tab-container"> 
 
    <div class="tabs"> 
 
    <a data-tab="tab5">test1</a> 
 
    <a data-tab="tab6">test2</a> 
 
    <a data-tab="tab7">test3</a> 
 
    <a data-tab="tab8">test4</a> 
 
    </div> 
 

 
    <div class="container" data-tab="tab5">5Some content</div> 
 
    <div class="container" data-tab="tab6">6Some content</div> 
 
    <div class="container" data-tab="tab7">7Some content</div> 
 
    <div class="container" data-tab="tab8">8Some content</div> 
 
</div> 
 

 
<div class="tab-container"> 
 
    <div class="tabs"> 
 
    <a data-tab="tab5">test1</a> 
 
    <a data-tab="tab6">test2</a> 
 
    <a data-tab="tab7">test3</a> 
 
    <a data-tab="tab8">test4</a> 
 
    </div> 
 

 
    <div class="container" data-tab="tab5">5Some content</div> 
 
    <div class="container" data-tab="tab6">6Some content</div> 
 
    <div class="container" data-tab="tab7">7Some content</div> 
 
    <div class="container" data-tab="tab8">8Some content</div> 
 
</div> 
 

 

 

 
<div class="tab-container"> 
 
    <div class="tabs"> 
 
    <a data-tab="tab5">test1</a> 
 
    <a data-tab="tab6">test2</a> 
 
    <a data-tab="tab7">test3</a> 
 
    <a data-tab="tab8">test4</a> 
 
    </div> 
 

 
    <div class="container" data-tab="tab5">5Some content</div> 
 
    <div class="container" data-tab="tab6">6Some content</div> 
 
    <div class="container" data-tab="tab7">7Some content</div> 
 
    <div class="container" data-tab="tab8">8Some content</div> 
 
</div>

1

的想法很簡單:

裹有一個div您的內容,就像你如何包裝你的標籤(否則他們都是兄弟姐妹) 。

現在添加無效,以標籤的所有兒童,除了每個標籤的第一個孩子

$(".tabs a:not(:first-child)").addClass('inactive'); 

目標由.tabs + div每格的內容(這將找到下一個兄弟格),然後隱藏所有的孩子,是不是第一個孩子每個div都

$(".tabs + div > div:not(:first-child)").hide(); 

當點擊選項卡,請家長則去旁邊div找到所有的孩子(.container)和隱藏它們,然後顯示,點擊ID。

$(this).parent().next('div').find('.container').hide(); 

也是固定的HTML你,有重複的標識(確保ID是唯一的)

$(document).ready(function() { 
 
    $(".tabs a:not(:first-child)").addClass('inactive'); 
 
    $(".tabs + div > div:not(:first-child)").hide(); 
 

 
    $('.tabs a').click(function() { 
 
    var t = $(this).attr('id'); 
 
    if ($(this).hasClass('inactive')) { //this is the start of our condition 
 
     $(this).siblings('a').addClass('inactive'); 
 
     $(this).removeClass('inactive'); 
 

 
     $(this).parent().next('div').find('.container').hide(); 
 
     $('#' + t + 'C').fadeIn('slow'); 
 
    } 
 
    }); 
 

 
});
.tabs { 
 
    width: 100%; 
 
    height: 30px; 
 
    border-bottom: solid 1px #CCC; 
 
    padding-right: 2px; 
 
    margin-top: 30px; 
 
} 
 

 
a { 
 
    cursor: pointer; 
 
} 
 

 
.tabs a { 
 
    float: left; 
 
    list-style: none; 
 
    border-top: 1px solid #ccc; 
 
    border-left: 1px solid #ccc; 
 
    border-right: 1px solid #ccc; 
 
    margin-right: 5px; 
 
    border-top-left-radius: 3px; 
 
    border-top-right-radius: 3px; 
 
    outline: none; 
 
    font-family: Arial, Helvetica, sans-serif; 
 
    font-size: small; 
 
    font-weight: bold; 
 
    color: #5685bc; 
 
    ; 
 
    padding-top: 5px; 
 
    padding-left: 7px; 
 
    padding-right: 7px; 
 
    padding-bottom: 8px; 
 
    display: block; 
 
    background: #FFF; 
 
    border-top-left-radius: 3px; 
 
    border-top-right-radius: 3px; 
 
    text-decoration: none; 
 
    outline: none; 
 
} 
 

 
.tabs a.inactive { 
 
    padding-top: 5px; 
 
    padding-bottom: 8px; 
 
    padding-left: 8px; 
 
    padding-right: 8px; 
 
    color: #666666; 
 
    background: #EEE; 
 
    outline: none; 
 
    border-bottom: solid 1px #CCC; 
 
} 
 

 
.tabs a:hover, 
 
.tabs a.inactive:hover { 
 
    color: #5685bc; 
 
    outline: none; 
 
} 
 

 
.container { 
 
    clear: both; 
 
    width: 100%; 
 
    border-left: solid 1px #CCC; 
 
    border-right: solid 1px #CCC; 
 
    border-bottom: solid 1px #CCC; 
 
    text-align: left; 
 
    padding-top: 20px; 
 
} 
 

 
.container h2 { 
 
    margin-left: 15px; 
 
    margin-right: 15px; 
 
    margin-bottom: 10px; 
 
    color: #5685bc; 
 
} 
 

 
.container p { 
 
    margin-left: 15px; 
 
    margin-right: 15px; 
 
    margin-top: 10px; 
 
    margin-bottom: 10px; 
 
    line-height: 1.3; 
 
    font-size: small; 
 
} 
 

 
.container ul { 
 
    margin-left: 25px; 
 
    font-size: small; 
 
    line-height: 1.4; 
 
    list-style-type: disc; 
 
} 
 

 
.container li { 
 
    padding-bottom: 5px; 
 
    margin-left: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="tabs"> 
 
    <a id="tab1">test1</a> 
 
    <a id="tab2">test2</a> 
 
    <a id="tab3">test3</a> 
 
    <a id="tab4">test4</a> 
 
</div> 
 
<div> 
 
    <div class="container" id="tab1C">1Some content</div> 
 
    <div class="container" id="tab2C">2Some content</div> 
 
    <div class="container" id="tab3C">3Some content</div> 
 
    <div class="container" id="tab4C">4Some content</div> 
 
</div> 
 

 
<div class="tabs"> 
 
    <a id="tab5">test1</a> 
 
    <a id="tab6">test2</a> 
 
    <a id="tab7">test3</a> 
 
    <a id="tab8">test4</a> 
 
</div> 
 
<div> 
 
    <div class="container" id="tab5C">5Some content</div> 
 
    <div class="container" id="tab6C">6Some content</div> 
 
    <div class="container" id="tab7C">7Some content</div> 
 
    <div class="container" id="tab8C">8Some content</div> 
 
</div> 
 

 
<div class="tabs"> 
 
    <a id="tab9">test1</a> 
 
    <a id="tab10">test2</a> 
 
    <a id="tab11">test3</a> 
 
    <a id="tab12">test4</a> 
 
</div> 
 
<div> 
 
    <div class="container" id="tab9C">9Some content</div> 
 
    <div class="container" id="tab10C">10Some content</div> 
 
    <div class="container" id="tab11C">11Some content</div> 
 
    <div class="container" id="tab12C">12Some content</div> 
 
</div>

相關問題