<nav id="menu">
<ul class="menu-bar">
<li><a href="#tab-home" data-tab="tab-home">返回題庫</a></li>
<li><a href="#tab-new" data-tab="tab-new">新建題庫</a></li>
<li class="has-sub">
<a href="#">新增試題</a>
<ul class="sub-menu">
<li><a href="#tab-single" data-tab="tab-single">單選題</a></li>
<li><a href="#tab-multi" data-tab="tab-multi">多選題</a></li>
</ul>
</li>
</ul>
</nav>
<section class="tab-panel" id="tab-home">...</section>
<section class="tab-panel" id="tab-new">...</section>
<section class="tab-panel" id="tab-single">...</section>
<section class="tab-panel" id="tab-multi">...</section>
.tab-panel { display: none; }
.tab-panel.active { display: block; }
.has-sub > .sub-menu { display: none; }
.has-sub:hover > .sub-menu { display: block; }
document.addEventListener('DOMContentLoaded', () => {
const tabs = document.querySelectorAll('.tab-panel');
const triggers = document.querySelectorAll('[data-tab]');
// 1. 統一切換函式
function showTab(tabId) {
tabs.forEach(t => t.classList.toggle('active', t.id === tabId));
}
// 2. 綁定所有觸發點
triggers.forEach(a => {
a.addEventListener('click', e => {
e.preventDefault();
const tabId = a.dataset.tab;
if (tabId) showTab(tabId);
});
});
// 3. 預設顯示第一個
if (tabs[0]) tabs[0].classList.add('active');
});
// 若點擊子選單,同時高亮父選單
const parentLi = a.closest('.has-sub');
if (parentLi) parentLi.classList.add('active-parent');
role="tablist"、role="tab"、role="tabpanel"ArrowLeft/Right 切換、Enter/Space 啟用aria-selected、aria-controls可直接複製至 .html 檔案雙擊執行,無需伺服器。