Javascript 使用数组#排序对HTML表进行排序

Javascript 使用数组#排序对HTML表进行排序,javascript,html,Javascript,Html,我知道这个网站是一个很好的资源,它提供了通过自己编写排序和元素交换对HTML表进行排序的方法。我用它,而且效果很好。我的目标是不添加包含的库,但我设想一个更好的方法可能如下: 其中tr=document.getElementById(“table1”).rows, 元素以tr[index].cells[0].textContent的形式访问 所以这个tr看起来就像是一个行数组 然而 tr=document.getElementById(“table1”).rows; tr.sort(函数(a,b

我知道这个网站是一个很好的资源,它提供了通过自己编写排序和元素交换对HTML表进行排序的方法。我用它,而且效果很好。我的目标是不添加包含的库,但我设想一个更好的方法可能如下:

其中tr=document.getElementById(“table1”).rows,
元素以tr[index].cells[0].textContent的形式访问

所以这个tr看起来就像是一个行数组

然而

tr=document.getElementById(“table1”).rows;
tr.sort(函数(a,b){
返回b.cells[0].textContent-a.cells[0].textContent;//从高到低排序
})
失败,因为它说tr.sort不是函数。而table.rows似乎定义为对象而不是数组。不知道这有什么不同,但行的外观和行为就像一个数组

是否有一些变通方法允许此数组方法与Javascript排序一起使用

对评论中问题的答复:

表很复杂,因为每一行项目实际上是两个相邻的行。加上一些TD为空,除非得到处理,否则会导致数字NaN错误。我只对2的第一行排序,但移动两行。但我确实有其他可以排序的简单普通表。17列,一行看起来像


>5.47-36.9726.6215.052.0815.9632.3313.641.3611.9321.79-4.4331.4618.37
>13.34标准普尔500指数
我现在的代码是

函数可排序(tr,sort_col){
变量len,i,x,y,a,b;
len=tr.length-2;
i=1;
而(i0){
a=parseFloat(a);//parseFloat,因为它正在读取字符串字段,比如12.6%
b=浮点数(b);
如果(isNaN(a))a=0;//早期的空白值会导致NaN错误
如果(isNaN(b))b=0;
}   
如果((排序列==0)?a>b:a
您可以使用
Array.from
获取数组中可排序的
td
元素。然后按该顺序将它们再次添加到表中。这将被理解为DOM中的一次移动,因此您将得到已排序的表行:

let table=document.getElementById(“表1”);
设trs=table.rows;
数组.from(trs)
.sort((a,b)=>a.cells[0].textContent-b.cells[0].textContent)
.forEach(tr=>table.appendChild(tr))

2.
4.
3.
1.

您可以使用
Array.from
获取数组中可排序的
td
元素。然后按该顺序将它们再次添加到表中。这将被理解为DOM中的一次移动,因此您将得到已排序的表行:

let table=document.getElementById(“表1”);
设trs=table.rows;
数组.from(trs)
.sort((a,b)=>a.cells[0].textContent-b.cells[0].textContent)
.forEach(tr=>table.appendChild(tr))

2.
4.
3.
1.


表中的值是硬编码的还是用javascript填写的?硬编码的数字能否提供
的HTML代码?试图在原始post edit中添加响应。请查看此帮助帖子,了解表中的值是硬编码的还是用javascript填充的?硬编码的数字能否提供
的HTML代码?试图在原始帖子编辑器中添加响应。请查看此帮助帖子,它非常优雅。我创建了一个巨大的代码块来解决这个问题,并从您的答案中学到了很多。谢谢,我不是执行官,只是一个欣赏的旁观者,谢谢。我检查了它,它完成了工作,非常优雅,但是对于一个巨大的表,我担心构建另一个表然后将其移回的额外运行工作。不确定工作是否改善了冒泡排序。不过,它并没有建立另一张表<代码>数组。from
仅创建DOM对象(
tr
)引用的浅拷贝。第二,JavaScript引擎通常不会使用冒泡排序,而是更有效的一种,如合并排序、快速排序等。是的,这就是我希望使用JavaScript排序的原因,因为对表进行排序的示例使用了自己的冒泡排序。也许这只对一个非常大的种类来说很重要。您的语法对我来说是新的,但是.cells[0]显然意味着每个表行有一个数组索引,所以我喜欢这样。我理解x.sort(),并假设两个空白缩进点必须指向数组。所以我认为你是对的,但这对我来说仍然是新的,仍然试图找到所描述的,以确保我理解它。这是非常优雅的。我创建了一个巨大的代码块来解决这个问题,并从您的答案中学到了很多。谢谢,我不是执行官,只是一个欣赏的旁观者,谢谢。我检查了它,它完成了工作,非常优雅,但是对于一个巨大的表,我担心构建另一个表然后将其移回的额外运行工作。不确定工作是否改善了冒泡排序。不过,它并没有建立另一张表<代码>数组。from
仅创建DOM对象(
tr
)引用的浅拷贝。第二,JavaScript引擎通常不会使用冒泡排序,而是更有效的一种,如合并排序、快速排序等。是的,这就是我希望使用JavaScript排序的原因,因为对表进行排序的示例使用了自己的冒泡排序。也许这只对一个非常大的种类来说很重要。您的语法对我来说是新的,但是.cells[0]显然意味着每个表行有一个数组索引,所以我喜欢这样。我理解x.sort()并假设两个空格缩进为d