如果表格中有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行,它的工作完美。任何人都知道我在做什么。做错了?
答案 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;
如果没有辅助密钥可以作为保留顺序的有意义的方法,您可以在排序到添加密钥之前始终预处理列表,该密钥基于原样排序