HTML table 超过 10 行排序无效
HTML table with more than 10 rows sorting is not working
我的 table 有问题,如果 table 中的行数超过 10 行,我的 table 将无法排序 (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
中的特定列中,让table按照这个列排序。然后我发送行 ID 以检查其索引是否已更改。如果该行向上跳(其索引减少),那么我将其突出显示,否则不会。正如我所说,如果我们有 10 行或更少但不超过 10 行,它就完美了。有人知道我做错了什么吗?
您的排序比较器函数应该 return 一个数字,而不是布尔值。 return
语句应该是
return valA - valB;
比较器 return 值解释为:
- 负数表示第一项应排在第二项之前
- 正数意味着第二个项目应该在第一个之前
- 零表示他们可以按任何顺序进行
JavaScript 中 .sort()
例程的规范明确允许算法 不稳定 。这意味着当您的比较器 returns 0
时,项目 可能会 被重新排序,而不是保留在它们的原始顺序中。
如果需要稳定性,可以在一些secondary key上添加对比;也就是说,如果主键不同,则该行的其他部分并不重要。为此,如果第一次比较结果为零,则必须提取辅助键:
// ...
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;
如果没有辅助键可以作为一种有意义的方式来保持顺序,您可以在排序之前对列表进行预处理,然后添加一个键,一个基于按原样订购。
我的 table 有问题,如果 table 中的行数超过 10 行,我的 table 将无法排序 (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
中的特定列中,让table按照这个列排序。然后我发送行 ID 以检查其索引是否已更改。如果该行向上跳(其索引减少),那么我将其突出显示,否则不会。正如我所说,如果我们有 10 行或更少但不超过 10 行,它就完美了。有人知道我做错了什么吗?
您的排序比较器函数应该 return 一个数字,而不是布尔值。 return
语句应该是
return valA - valB;
比较器 return 值解释为:
- 负数表示第一项应排在第二项之前
- 正数意味着第二个项目应该在第一个之前
- 零表示他们可以按任何顺序进行
JavaScript 中 .sort()
例程的规范明确允许算法 不稳定 。这意味着当您的比较器 returns 0
时,项目 可能会 被重新排序,而不是保留在它们的原始顺序中。
如果需要稳定性,可以在一些secondary key上添加对比;也就是说,如果主键不同,则该行的其他部分并不重要。为此,如果第一次比较结果为零,则必须提取辅助键:
// ...
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;
如果没有辅助键可以作为一种有意义的方式来保持顺序,您可以在排序之前对列表进行预处理,然后添加一个键,一个基于按原样订购。