排序超过10行的HTML表格不起作用

时间:2015-07-28 13:53:54

标签: javascript jquery html arrays html-table

如果表格中有10行以上,我的表格有问题(desc)。如果我有10行或更少行但不是更多,它可以很好地工作。这是我的代码:

function sortAndFadingRows(rowId) {
    var $row = $(rowId);
    var oldRowIndex = $row.index();
    sortTable();
    var newRowIndex = $row.index();
    if (newRowIndex < oldRowIndex) {
        $row.children().effect('highlight', { color: '#fff' }, 1000);
    }                             }



var sortTable = function () {
    var table = $("#tableId");

    var sorts = table.find(".item").detach().toArray();
    sorts.sort(function (a, b) {
        var valA = parseInt($(a).find(".myValue").text());
        var valB = parseInt($(b).find(".myValue").text());
        return valA < valB; 
    });

   table.append(sorts);          };

每次收到数据时都会调用sortAndFadingRows(rowId),当我收到数据时,我会直接将其放在特定列的td中,以根据此列对表进行排序。然后我发送行ID以检查其索引是否已更改。如果该行跳起(其索引减少),那么我突然显示它,否则不会。正如我所说,如果我们有10行或更少但不超过10行,它的工作完美。任何人都知道我在做什么。做错了?

1 个答案:

答案 0 :(得分:2)

您的排序比较器函数应该返回一个数字,而不是布尔值。 return语句应为

    return valA - valB;

比较器返回值被解释为:

  • 负数表示第一个项目应在第二个
  • 之前排序
  • 正数表示第二项应该在第一项
  • 之前
  • 零意味着他们可以按任何顺序进行

JavaScript中.sort()例程的规范明确允许算法不稳定。这意味着当比较器返回0时,可能会重新排序,而不是保留原始顺序。

如果您需要稳定性,可以在某些辅助密钥上添加比较;也就是说,如果主键不同,行的某些其他部分并不重要。为此,如果第一个比较结果为零,则必须提取辅助密钥:

  // ...
  var result = valA - valB;
  if (result !== 0)
    return result;
  // Fetch secondary keys
  valA = parseInt($(a).find(".secondary").text());
  valB = parseInt($(b).find(".secondary").text());
  return valA - valB;

如果没有辅助密钥可以作为保留顺序的有意义的方法,您可以在排序到添加密钥之前始终预处理列表,该密钥基于原样排序