当我们在主菜单中单击另一个选项卡并返回第一个选项卡时,第二个菜单(第二个选项卡)失去其活动状态(没有打开选项卡)
此外is-active,链接上的状态被删除。
我不知道如何不影响子标签。
这是查看问题的链接。
<div class="container js-tabs-container">
<div class="tabs">
<ul>
<li class="is-active" data-tab="tab-1"><a>Link 1</a></li>
<li data-tab="tab-2"><a>Link 2</a></li>
</ul>
</div>
<div class="js-tab-content" id="tab-1">
<p>Tab 1</p>
<!-- Nesting tabs -->
<div class="container js-tabs-container">
<div class="tabs">
<ul>
<li class="is-active" data-tab="tab-2-1"><a>Link 2-1</a></li>
<li data-tab="tab-2-2"><a>Link 2-2</a></li>
</ul>
</div>
<div class="js-tab-content" id="tab-2-1">
<p>Tab 2-1</p>
</div>
<div class="js-tab-content" id="tab-2-2">
<p>Tab 2-2</p>
</div>
</div>
</div>
<div class="js-tab-content" id="tab-2">
<p>Tab 2</p>
</div>
</div>
document.addEventListener('DOMContentLoaded', function () {
var tabs = document.getElementsByClassName('tabs');
if (tabs) {
var _loop = function _loop() {
var tabListItems = tabs[i].querySelectorAll('.tabs-menu-item');
tabListItems.forEach(function(tabListItem) {
// création d'un écouteur d'évènements sur le clic d'une tab
tabListItem.addEventListener('click', function () {
// suppression de la classe is-active sur chacune des tabs avant de la rajouter sur la tab qui a été cliquée
tabListItems.forEach(function(tabListItem) {
tabListItem.classList.remove('is-active');
});
tabListItem.classList.add('is-active');
// tabName correspond à la valeur de l'attribut data-tab
var tabName = tabListItem.dataset.tab;
// on identifie tous les contenus possibles puis on applique la classe has-display-none si l'ID du contenu ne correspond pas à la valeur de l'attribut data-tab
tabListItem.closest('.js-tabs').querySelectorAll('.js-tab-content').forEach(function(tabContent) {
if (tabContent.id !== tabName) {
tabContent.classList.add('has-display-none');
} else {
tabContent.classList.remove('has-display-none');
}
});
}, false);
});
};
for (var i = 0; i < tabs.length; i++) {
_loop();
}
}
});
谢谢