頁面展示一個帶複選框的表格,用戶勾選部分行後點擊「抽取」按鈕,要求:

<input type="checkbox">,區分「已勾選」與「未勾選」兩組$.post() 發送給後端replaceWith() 逐行替換未勾選的 <tr> 節點function extractUnchecked() {
const uncheckedIds = [];
$('input[name="rowCheckbox"]:not(:checked)').each(function() {
uncheckedIds.push($(this).val());
// 保存當前行引用,稍後替換
$(this).data('trRef', $(this).closest('tr'));
});
if (uncheckedIds.length === 0) return;
$.post('/api/refreshRows', { ids: uncheckedIds.join(',') }, function(res) {
// 假設後端按順序返回 HTML 字符串數組
res.data.forEach((html, idx) => {
const $tr = $('input[name="rowCheckbox"]:not(:checked)').eq(idx).closest('tr');
$tr.replaceWith(html);
});
}, 'json');
}
@PostMapping("/refreshRows")
public Result> refreshRows(@RequestParam String ids) {
List idList = Arrays.stream(ids.split(","))
.map(Long::valueOf)
.collect(Collectors.toList());
List entities = service.getByIds(idList);
List htmlRows = entities.stream()
.map(e -> "<tr><td>" + e.getName() + "</td>...</tr>")
.collect(Collectors.toList());
return Result.ok(htmlRows);
}
頁面結構參考圖:



$(document).on('click', ...))DocumentFragment 或虛擬列表優化性能通過「前端分組 → 異步請求 → 精準替換」三步走,即可實現無刷新局部更新且保留用戶操作狀態,體驗流暢且代碼簡潔。