頁面包含多組 `
XXX
XXX
- 1
- 2
- 3
XXX
- 4
- 5
- 6
- 7
XXX
- 8
- 9
- 10
內容 1
內容 2
內容 3
內容 4
內容 5
內容 6
內容 7
內容 8
內容 9
內容 10
$(function() {
$('.helpBox-leftbox li[data-target]').on('click', function() {
const target = $(this).data('target'); // 取得 data-target 值
// 1. 隱藏所有擁有 data-panel 的面板
$('.helpTutorials[data-panel]').hide();
// 2. 顯示目標面板 (淡入動畫)
$('.helpTutorials[data-panel="' + target + '"]').fadeIn();
});
});
| 技巧 | 作用 | 優勢 |
|---|---|---|
data-target / data-panel | HTML5 data-* 屬性儲存對應關係 | 語意清晰、不污染 class/id、jQuery .data() 直接讀取 |
| 統一選擇器隱藏 | $('.helpTutorials[data-panel]').hide() | 無需迴圈、不依賴索引順序、新增面板自動生效 |
| 屬性選擇器精準顯示 | $('[data-panel="'+target+'"]') | 精確匹配、支援多組獨立切換互不干擾 |
| 事件委派 (可選) | $(document).on('click', '.helpBox-leftbox li[data-target]', ...) | 動態新增 ` |
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('.helpBox-leftbox li[data-target]').forEach(li => {
li.addEventListener('click', () => {
const target = li.dataset.target;
// 隱藏所有
document.querySelectorAll('.helpTutorials[data-panel]').forEach(p => p.hidden = true);
// 顯示目標
const panel = document.querySelector('.helpTutorials[data-panel="' + target + '"]');
if (panel) panel.hidden = false; // 或 panel.style.display = 'block';
});
});
});
若每組 `
data-panel-group,面板加同組標記:
...
...
...
...
// JS 邏輯
const group = li.closest('[data-panel-group]').dataset.panelGroup;
document.querySelectorAll('.helpTutorials[data-panel-group="' + group + '"]').forEach(p => p.hidden = true);
document.querySelector('.helpTutorials[data-panel="'+target+'"][data-panel-group="'+group+'"]').hidden = false;
id="panel1"` 但選擇器寫成 `$('.panel1')` → class 與 id 混淆。**統一用 data-panel 屬性選擇器**。多組 Tab/面板切換的最佳模式:**HTML `data-target`/`data-panel` 聲明對應關係 → JS 統一選擇器 `hide()` → 屬性選擇器 `show()`**。此模式擴充性極強:新增面板只需補 HTML 屬性,JS 完全不用改;支援多組獨立切換、動態新增、動畫效果自由切換。