JavaScript数组排序(函数)对表行进行排序-不排序

JavaScript数组排序(函数)对表行进行排序-不排序,javascript,dynamic,Javascript,Dynamic,我试图在客户端对动态构造的表进行排序。到目前为止,我已经做了研究,发现JavaScript的排序方法将接受回调。以下是我到目前为止的情况: function retrvCatalog(e){ var merch = document.getElementById('merch'); var tRows = merch.rows; var tBody = merch.tBodies; var rowArr = []; for (x in tRows){ rowArr[x] = tRows[

我试图在客户端对动态构造的表进行排序。到目前为止,我已经做了研究,发现JavaScript的排序方法将接受回调。以下是我到目前为止的情况:

function retrvCatalog(e){
var merch = document.getElementById('merch');
var tRows = merch.rows;
var tBody = merch.tBodies;
var rowArr = [];
for (x in tRows){
    rowArr[x] = tRows[x];
}
rowArr.sort(function(a, b){
    if (a.cells.textContent < b.cells.textContent){
        return -1;
    }
    if(a.cells.textContent > b.cells.textContent){
        return 1;
    }
    return 0;
});
}
在Firebug中单步执行,它似乎不会更改行的顺序。有人能帮我找出我遗漏了什么吗

最终算法


行中的最后两列是数字,这就是排序方法略有变化的原因。

我不确定是否遗漏了什么,但我非常确定您不能在单元格数组中使用textContent。您需要为单元格编制索引,以便知道实际排序的列。如果您的行每行有4列,或者即使只有1列,您仍然需要告诉排序函数要排序的列

rowArr.sort(function(a,b) {
    a = parseFloat(a.cells.textContent);
    b = parseFloat(b.cells.textContent);
    return (a-b);
};
for(var x...
因此,在排序函数中,如果要按第二列排序,则需要如下内容:

rowArr.sort(function (a, b) {
    if (a.cells[1].textContent < b.cells[1].textContent) {
        return -1;
    } else if (a.cells[1].textContent > b.cells[1].textContent) {
        return 1;
    }
    return 0;
});

我不确定你的单元格中有什么,但你可能想使用.innerHTML,而不是.textContent。

你的代码中有几个问题

首先,您没有声明x变量

for(var x...
其次,不要使用for in来迭代类似数组的集合。用于

你需要决定你想要哪一个单元格,并通过索引要求它

console.log(a.cells[0].textContent);
最后,您应该知道,这种技术不会在DOM中显示排序结果。您只是在对数组进行排序。您需要将新的顺序附加到DOM中

也许你知道这一点,但你没有在代码中显示出来

我不知道行与tBodies的关系,所以我不能给出一个例子。但是如果所有行都在一个tbody中,只需循环数组,tbody[0]。appendChildrowArr[i]

不要使用for in来迭代类似集合的数组。-用户1673729


tRows不是数组,而是HTML集合。这就是为什么我用in-nodirtyrockstar


HTML集合是一个类似数组的集合。不要在中使用。

有个主意。但是,它不应该按字母顺序和数字顺序排序吗?如果我做对了,行的顺序不会改变,但数组是排序的?tRows不是数组,它是HTML集合。这就是为什么我用你的建议很有帮助,但没有回答这个问题。谢谢你的帮助!声明x变量是不必要的,但如果不使用var,它会生成一个名为x的全局变量。如果查看:,您会发现,即使for循环在函数中的作用域是有限的,x在使用后变为全局变量,但在使用之前是未定义的。这个答案无助于我理解您的观点。for in用于迭代集合。tRows是我想迭代的一个集合。@nodirtyrockstar你说得对,但请看这篇文章:
console.log(a.cells.textContent); // undefined
console.log(a.cells[0].textContent);