根據「污染物類型」下拉框選項,動態控制表格第 6-7 行的顯示內容:
將需動態切換的行包裹在獨立 <tbody> 中,賦予唯一 ID,通過 CSS display: none 初始隱藏,JS 切換顯示。
<select id="pollutantType" onchange="toggleRows(this.value)">
<option value="">請選擇污染物類型</option>
<option value="degradable">降解型</option>
<option value="volatile">揮發型</option>
</select>
<table id="dataTable">
<thead>
<tr><th>通用列 1</th><th>通用列 2</th></tr>
</thead>
<tbody id="fixedRows">
<tr><td>固定行 1</td><td>數據</td></tr>
<tr><td>固定行 2</td><td>數據</td></tr>
<!-- 前 5 行固定顯示 -->
</tbody>
<!-- 動態行組,初始隱藏 -->
<tbody id="degradableRows" style="display: none;">
<tr><td>降解污染物排放量</td><td><input type="text"></td></tr>
<tr><td>降解係數</td><td><input type="text"></td></tr>
</tbody>
<tbody id="volatileRows" style="display: none;">
<tr><td>揮發污染物排放量</td><td><input type="text"></td></tr>
<tr><td>揮發係數</td><td><input type="text"></td></tr>
</tbody>
</table>
<script>
function toggleRows(type) {
// 獲取所有動態 tbody
const degradable = document.getElementById('degradableRows');
const volatile = document.getElementById('volatileRows');
// 先全部隱藏
degradable.style.display = 'none';
volatile.style.display = 'none';
// 根據選項顯示對應組
switch (type) {
case 'degradable':
degradable.style.display = 'table-row-group'; // tbody 正確 display 值
break;
case 'volatile':
volatile.style.display = 'table-row-group';
break;
default:
// 未選擇時均隱藏
break;
}
}
</script>
| 技術點 | 說明 |
|---|---|
| tbody 分組 | 表格允許多個 tbody,每組行獨立控制,語義清晰 |
| display: table-row-group | tbody 顯示時的正確值,而非 block/flex |
| 初始隱藏 | style="display: none" 避免頁面閃爍 |
| switch 判斷 | 擴展新類型只需加 case,維護性好 |
$('#pollutantType').change(function() {
const val = $(this).val();
$('#degradableRows, #volatileRows').hide();
if (val) $('#' + val + 'Rows').show(); // 命名規約:degradableRows, volatileRows
});
v-if / v-show 綁定計算屬性或 data 狀態。{type === 'degradable' && <DegradableRows />}。tbody 分組 + ID 映射 + 切換 display 是原生 JS 實現表格局部行動態顯隱的最佳實踐。結構清晰、性能優、易擴展,無需操作 DOM 節點增刪,避免事件綁定丟失。