前言
在網頁中,我們常會使用目錄區塊(toc-block)來幫助使用者快速瀏覽內容,但有時候目錄內容(gs-toc)可能因為資料不完整或條件不符而不存在,這時候空白的目錄區塊反而會影響頁面美觀與使用體驗。本文示範如何用簡單的 JavaScript 程式碼,在頁面載入完成後自動檢查並隱藏沒有目錄內容的 toc-block,適合前端工程師或自學者優化動態內容顯示。
為什麼要隱藏空的 toc-block
空的目錄區塊會佔據頁面空間,造成視覺上的空洞,甚至誤導使用者以為頁面資料不完整。透過程式自動判斷並隱藏,可以提升頁面整潔度與使用者體驗,尤其在內容經常變動或由後端動態產生時更為重要。
主要程式碼說明
以下是核心程式碼片段:
document.addEventListener("DOMContentLoaded", function() {
const tocBlocks = document.querySelectorAll(".toc-block");
tocBlocks.forEach(block => {
const hasToc = block.querySelector(".gs-toc");
if (!hasToc) {
block.style.display = "none";
}
});
});
- 使用
DOMContentLoaded事件確保 DOM 元素已經載入完畢,避免查詢不到元素。 - 利用
document.querySelectorAll選取所有.toc-block元素,方便批次處理。 - 針對每個 toc-block,使用
querySelector檢查是否含有.gs-toc子元素。 - 若找不到
.gs-toc,代表此目錄區塊沒有內容,將其display設為none,達到隱藏效果。
實務應用與優化方向
- 此方法適用於靜態或動態產生的目錄區塊,確保頁面不會顯示空白區塊。
- 若目錄內容是透過 AJAX 載入,需將檢查邏輯放在資料載入完成後執行。
- 可搭配 CSS 動畫效果,讓隱藏過程更為平滑。
- 若頁面中 toc-block 數量龐大,考慮使用更有效率的 DOM 操作或節流機制。
常見問題與注意事項
- 確認
.gs-toc是目錄內容的正確 class 名稱,避免誤判。 - 若頁面中有多層目錄結構,需調整選擇器以符合需求。
- 使用
display: none會完全移除元素佔用空間,若想保留佔位可改用其他 CSS 屬性。
完整程式碼
document.addEventListener("DOMContentLoaded", function() {
// 取得所有 toc-block
const tocBlocks = document.querySelectorAll(".toc-block");
tocBlocks.forEach(block => {
// 檢查這個 toc-block 底下是否有 gs-toc
const hasToc = block.querySelector(".gs-toc");
// 如果沒有找到,則隱藏整個區塊
if (!hasToc) {
block.style.display = "none";
}
});
});