Javascript 排序超过10行的HTML表不工作

Javascript 排序超过10行的HTML表不工作,javascript,jquery,html,arrays,html-table,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 < oldR

我的表有一个问题,如果我的表中有超过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){
var$row=$(rowId);
var oldRowIndex=$row.index();
可排序();
var newRowIndex=$row.index();
if(新行索引<旧行索引){
$row.children().effect('highlight',{color:'#fff'},1000);
}                             }
var sortTable=函数(){
var表格=$(“#表格ID”);
var sorts=table.find(“.item”).detach().toArray();
sorts.sort(函数(a,b){
var valA=parseInt($(a).find(“.myValue”).text();
var valB=parseInt($(b).find(“.myValue”).text();
返回valA

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

排序比较器函数应该返回一个数字,而不是布尔值。
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;

如果没有可以作为保留顺序的有意义方法的辅助键,您可以在排序之前对列表进行预处理以添加一个键,一个基于原样排序的键。

我认为您的数据排序函数应该有问题,必须返回三个值:-1、0、1表示小于/等于/大于。因为您返回的是布尔值,所以只能提供0和1。@raghavendra为什么这么说?你知道一些我不知道的事情吗?@Pointy我用一个reverse()来对它进行排序,但效果不如我的代码,它有一些问题。@SamoZabo要按相反的顺序排序,只需
返回valB-valAinstead@Pointy你是对的,但还是一样的问题。例:如果位置1、2和3的值都是10,而第四个位置的值是9,问题是当第四个位置变为10时,它会跳到第一个位置,并将其他行推到向下位置。我希望它保持它的位置,直到它变为11,然后就可以通过考试了others@SamoZaboJavaScript
.sort()
例程不能保证稳定-这意味着当比较返回
0
时,它可能会改变元素的顺序。如果您可以使用辅助键进行排序,这会有所帮助。我将扩展答案。