【发布时间】:2012-08-05 16:47:41
【问题描述】:
我正在编写一些 JS 来对 HTML 表进行排序:HTML 表有一个标题行,单击列的标题会根据该列对行进行排序。我的一般算法如下:
- 将 HTML 转换为 JavaScript 数组。
- 对 JavaScript 数组进行排序。
- 将 JavaScript 数组重新转换为 HTML 表格。
现在,我的代码替换了表格的所有 innerHTML 元素。基本上,在对 JS 数组进行排序之后,它会触及表的每个节点,重写它的 innerHTML 值。我觉得可能有更有效的方法可以做到这一点,但我想不出。
编辑:
这是执行上述算法的第 (3) 部分的代码。我编辑了不相关的部分(只是一些字符串转换)。索引有点奇怪,因为我在将表格转换为数组时跳过了标题行,所以我在重写表格时对此进行了补偿。
for (var i = 0; i < numRows-1; i++){
for (var j = 0; j < numCols; j++){
var arrCell = tableArr[i][cols[j]];
tableEl.rows[i+1].cells[j].innerHTML = arrCell;
}
}
【问题讨论】:
-
你想只在纯 JS 中实现这个吗?
-
只要您在内存中生成新标记,然后仅使用 1 个 DOM 操作附加它,这应该是非常有效的。 DOM 修改远比 Javascript 数组操作慢。
-
@Ghillied 是的。我的意思是,在纯 JS 之外有没有更有效的方法来做到这一点?您是否建议我将标题行转换为链接并从服务器重新获取页面并排序表格?
-
@ChrisFrancis 对于 n 个节点的表,我正在执行 n DOM 操作(即我正在重写 innerHTML)。
-
@Avery 除了纯 JS 之外,没有比这更有效的方法了。我为您提供了一种使用库的方法,但是使用库会在页面中加载额外的千字节(因为您不会使用库中的其他函数)。
标签: javascript sorting html-table