通过JavaScript对HTML表进行排序的最有效方法是什么?

时间:2012-08-08 14:33:37

标签: javascript sorting html-table

我正在编写一些JS来对HTML表进行排序:HTML表有一个标题行,单击列的标题会根据该列对行进行排序。我的一般算法如下:

  1. 将HTML转换为JavaScript数组。
  2. 排序JavaScript数组。
  3. 将JavaScript数组重新转换为HTML表格。
  4. 现在,我的代码替换了表中的所有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;
        }
    }
    

3 个答案:

答案 0 :(得分:2)

您可以从DOM中删除行,进行排序,然后将它们添加回DOM。

var tbody = table.tBodies[0];

var placeholder = document.createElement('tbody');
table.replaceChild(placeholder, tbody);

//sort rows in tbody

table.replaceChild(tbody, placeholder);

答案 1 :(得分:0)

如果数据存储在服务器上 - 我会向服务器发送一个Ajax请求,其中包含排序类型(ASC,DESC等),对服务器上的数据进行排序(使用PHP等),然后接收在JavaScript中排序数据并将表格全新写入。

答案 2 :(得分:0)

您可以使用jQuery及其Datatables plugin。 在datatable语句中,您可以添加

"bSort": true

该作业将由脚本完成。虽然如果你能找到一种纯粹的JS方式,我建议你使用它,这样就不会给你的网页增加无用的重量。