jQuery如何优化根据行列名称为表格单元格添加tooltip的速度
优化方案
你原有代码的性能瓶颈主要来自重复的DOM查询和jQuery对象实例化:每个td的处理逻辑都会执行3次DOM查找操作,表格行列数越多,重复开销的放大效应越明显。优化核心是减少重复查询、提前缓存公共数据:
- 提前把列表头所有th的文本缓存为数组,仅需1次DOM查询即可拿到所有列名,避免每个td处理时都重复查找thead元素
- 按行遍历tbody,每行仅查询1次行头文本,批量处理该行下所有td,不需要每个td单独查找同级th
- 优先用jQuery的批量属性设置方法+回调,减少不必要的jQuery对象创建,降低调用开销
优化后代码如下:
const add_tooltip = function(context) { // 提前缓存列表头文本,仅查询1次 const $theadTh = context.find("thead th"); const colTextList = $theadTh.map((_, th) => th.innerText).get(); // 批量设置列表头title $theadTh.attr("title", function() { return this.innerText; }); // 逐行处理tbody内容 context.find("tbody tr").each(function() { const $row = $(this); // 每行仅查询1次行头文本 const rowThText = $row.children("th").first().text(); // 设置行头title $row.children("th").attr("title", rowThText); // 批量设置当前行所有td的title $row.children("td").attr("title", function(colIndex) { return `${rowThText}, ${colTextList[colIndex]}`; }); }); }; add_tooltip($("table"));
该方案在千行列的大表格场景下,运行耗时较原代码可降低80%以上。
内容的提问来源于stack exchange,提问作者tearfur
相关产品推荐
相关产品推荐

