jQuery DataTable排序后为每行title设置行索引 求代码优化方案
感谢Andrew James的帮助,我已经实现了将行索引写入行的title属性的功能。目前我编写的代码可以在每次排序后生效,但我希望找到优化这段代码的方案。
如果暂时没有更好的实现方式,这段可正常运行的代码也可以作为其他开发者的参考。
谢谢大家
优化方案
现有代码已经可以满足排序后更新行索引的基础需求,可优化点如下:
- 替换手动绑定的表头点击事件为DataTable原生
draw事件:原有实现仅能覆盖排序触发的行顺序变更,遇到搜索过滤、分页切换、数据重载等同样会改变行展示顺序的场景时会失效,draw事件会在表格每次重绘完成后触发,天然覆盖所有变更场景 - 修复变量命名冲突问题:原代码中
every方法的回调参数名和外部声明的计数变量rowIdx重名,会导致外部计数变量被覆盖,最终写入title的索引不符合从1开始计数的预期 - 简化计数逻辑:直接使用
every回调自带的行索引参数即可,不需要额外声明计数变量,代码更简洁
优化后代码
var table = $(".table").DataTable(...); // 表格重绘后将展示序号写入行的title属性 function writeRowIndex() { table.rows().every(function (index) { // 回调自带index从0开始,+1适配常规计数习惯 $(this.node()).attr('title', index + 1); }); } // 页面初始化时执行一次 writeRowIndex(); // 绑定表格重绘事件,所有行顺序变更场景自动触发更新 table.on('draw', writeRowIndex);
原可运行实现参考
var table = $(".table").DataTable(...); // 排序后将行索引写入每行的title属性 function writeRowIndex() { var rowIdx = 1; table.rows().every(function (rowIdx) { $(this.node()).attr('title', rowIdx); rowIdx++; }); } // 页面加载时调用 writeRowIndex(); // 每次排序事件触发后调用 var headers = table.columns().header().toArray(); $(headers).on('click', function () { writeRowIndex(); });
内容的提问来源于stack exchange,提问作者Perry
相关产品推荐
相关产品推荐

