多組獨立外層 `div`,各含一內層 `div`。滑鼠進入外層時,僅操作**該外層下的內層 div** (顯示/改樣式)。
<div class="outer" onmouseover="showInner(this)" onmouseout="hideInner(this)">
外層內容
<div class="inner">內層內容</div>
</div>
<script>
function showInner(outer) {
// 取得該 outer 下第一個 class="inner" 的 div
var inner = outer.querySelector('.inner'); // 推薦:支援任意選擇器
// 或 var inner = outer.getElementsByClassName('inner')[0];
// 或 var inner = outer.getElementsByTagName('div')[0]; // 僅適用結構固定
inner.style.display = 'block';
inner.style.backgroundColor = '#f60';
}
function hideInner(outer) {
var inner = outer.querySelector('.inner');
inner.style.display = 'none';
}
</script>
| 方法 | 回傳 | 動態性 | 選擇器支援 |
|---|---|---|---|
| querySelector | Element (第一個) | 靜態快照 | 完整 CSS 選擇器 |
| querySelectorAll | NodeList (靜態) | 靜態快照 | 完整 CSS 選擇器 |
| getElementsByClassName | HTMLCollection (動態) | 即時反映 DOM 變化 | 單一 class |
| getElementsByTagName | HTMLCollection (動態) | 即時反映 DOM 變化 | 標籤名 |
.outer .inner { display: none; }
.outer:hover .inner { display: block; background: #f60; }
document.getElementById('container').addEventListener('mouseover', e => {
const outer = e.target.closest('.outer');
if (outer) outer.querySelector('.inner').style.display = 'block';
});
document.getElementById('container').addEventListener('mouseout', e => {
const outer = e.target.closest('.outer');
if (outer) outer.querySelector('.inner').style.display = 'none';
});