利用 <ul>/<li> 巢狀結構表現階層,CSS display: none/block 控制展開/收合,JS 監聽點擊切換狀態與圖示。
<ul>
<li>
<a id="products" href="#">[+]Product</a>
<ul id="productsmenu" style="display: none">
<li>Product</li>
<li>Other Form</li>
<li>Price</li>
</ul>
</li>
</ul>
href="#" 為偽連結,防止頁面跳轉。
<script type="text/javascript">
// 簡化 getElementById
function $(id) { return document.getElementById(id); }
function toggle(e) {
// 相容 IE/Firefox 事件對象
if (!e) e = window.event;
// 取得觸發元素 ID:Firefox 用 e.target,IE 用 e.srcElement
var whichlink = (e.target) ? e.target.id : e.srcElement.id;
var obj = $(whichlink + "menu"); // 對應的子選單
var visible = (obj.style.display == "block");
var key = $(whichlink); // 觸發連結本身
var keyname = key.firstChild.nodeValue.substring(3); // 取得純文字(去掉 [+]/[-])
if (visible) {
obj.style.display = "none";
key.firstChild.nodeValue = "[+]" + keyname;
} else {
obj.style.display = "block";
key.firstChild.nodeValue = "[-]" + keyname;
}
// 防止偽連結點擊導致捲軸跳頂
return false;
}
// 綁定事件
$("products").onclick = toggle;
</script>
e.target,IE 用 e.srcElementonclick 直接綁定,現代專案建議用 addEventListener/attachEvent 統一封裝return false 抑制預設行為(捲軸置頂)本文為面試題心得整理,提供最基礎可運行版本,生產環境建議採用成熟 UI 庫(如 zTree, jQuery UI Tree, Ant Design Tree)。