動態生成的表格,每行包含「主信息」與「詳情信息」。鼠標懸停主信息顯示對應詳情,移出隱藏,**同一時間只顯示一行詳情**。
<tr>
<td>ID</td>
<td>Content</td>
<td>
<div class="box" data-index="0">Nickname<br/>
<div class="detail" style="display:none">Camper-Major-Grade</div>
</div>
</td>
</tr>
使用 `data-index` 替代 `id="box0"`,語義化且無 ID 衝突風險。
$(document).on('mouseenter', '.box', function() {
var idx = $(this).data('index');
$('.detail[data-index="' + idx + '"]').show();
}).on('mouseleave', '.box', function() {
var idx = $(this).data('index');
$('.detail[data-index="' + idx + '"]').hide();
});
| 寫法 | 缺點 | 優勢 |
|---|---|---|
| 原答案:`$("div[id^='box']").each(...)` + 閉包變量 `_index` | 依賴 ID 命名規範、動態新增行需重新綁定、閉包易出錯 | -- |
| 推薦:事件委託 `$(document).on(...)` + `data-index` | -- | 動態行自動生效、無需重綁、語義清晰、性能優(單一監聽器) |
/* HTML 結構調整:detail 為 box 同級或子級 */
.box:hover .detail { display: block; }
.detail { display: none; }
動態列表交互首選 **事件委託 + 數據屬性綁定**,擺脫 ID 依賴與閉包陷阱。簡單顯隱場景優先考慮 **CSS `:hover`**,複雜交互再上 JS。