Javascript JS/HTML如何使用固定子窗口对表进行排序

Javascript JS/HTML如何使用固定子窗口对表进行排序,javascript,html,sorting,Javascript,Html,Sorting,我有以下表格设置: 表格{ 边界塌陷:塌陷; } 表,th,td{ 边框:1px纯黑; } 系统名称 TotalSystemGB 驱力 总GB 使用国标 免费GB 系统1 1100 系统1 C: 100 50 50 系统1 D: 1000 750 250 系统2 820 系统2 C: 120 70 50 系统2 D: 700 500 200 系统3 3080 系统3 C: 80 30 50 系统3 D: 1000 750 250 系统3 E: 2000 1500 500 要对主要行进行排序,

我有以下表格设置:

表格{
边界塌陷:塌陷;
}
表,th,td{
边框:1px纯黑;
}

系统名称
TotalSystemGB
驱力
总GB
使用国标
免费GB
系统1
1100
系统1
C:
100
50
50
系统1
D:
1000
750
250
系统2
820
系统2
C:
120
70
50
系统2
D:
700
500
200
系统3
3080
系统3
C:
80
30
50
系统3
D:
1000
750
250
系统3
E:
2000
1500
500

要对主要行进行排序,您需要找到主要行及其相应的子行,然后基本上适当地追加它们

对于子行,您还需要查找主行,但仅将它们附加到对应的主行之后

var最后一列;
函数get_mains()
{
var mains=document.queryselectoral(“.mainRow”);
var mains_数组=[]
mains.forEach(项目=>mains_数组.push(项目));
返回电源和U阵列;
}
主电源的功能顺序(列)
{
var mains_array=get_mains();
var table=document.getElementById(“主体”);
电源阵列排序(功能(a、b){
让a_text=a.queryselectoral(“td”)[column].innerText;
让b_text=b.querySelectorAll(“td”)[column].innerText;
让真理;
如果(列)
{
返回+a_文本<+b_文本;
}
其他的
{
返回a_text.localeCompare(b_text);
}
});  
如果(最后一列===列)
{
mains_array.reverse();
}
用于(电源线阵列的let项目)
{
风险值=[];
var sibling=item.nextElementSibling;
表.附件(项目);
做
{
if(sibling.className==“mainRow”)
{
打破
}
兄弟姐妹。推(兄弟姐妹);
}
while(sibling=sibling.nextElementSibling);
对于(让兄弟姐妹中的兄弟姐妹)
{
表1.儿童(sib);
}
}
最后一列=(最后一列===列)?-1:列;
}
功能顺序(列)
{
var mains_array=get_mains();
var tbody=document.getElementById(“body”);
用于(电源线阵列的let项目)
{
风险值=[];
var sibling=item.nextElementSibling;
做
{
if(sibling.className==“mainRow”)
{
打破
}
兄弟姐妹。推(兄弟姐妹);
}
while(sibling=sibling.nextElementSibling);
兄弟.排序(函数(a,b){
让a_text=a.queryselectoral(“td”)[column].innerText;
让b_text=b.querySelectorAll(“td”)[column].innerText;
返回+a_文本<+b_文本;
});     
如果(最后一列===列)
{
兄弟姐妹。反向();
}   
对于(让兄弟姐妹中的兄弟姐妹)
{
body.insertBefore(sib,item.nextElementSibling);
}
}
最后一列=(最后一列===列)?-1:列;
}
表格{
边界塌陷:塌陷;
}
表,th,td{
边框:1px纯黑;
}

系统名称
TotalSystemGB
驱力
总GB
使用国标
免费GB
系统1
1100
系统1
C:
100
50
50
系统1
D:
1000
750
250
系统3
820
系统3
C:
120
70
50
系统3
D:
700
500
200
系统2
3080
系统2
C:
80
30
50
系统2
D:
1000
750
250
系统2
E:
2000
1500
500

您想坚持使用普通javascript还是使用jquery?使用Extjs等高级框架,您所期望的行为可能很容易实现。此要求非常具体,因此您可能需要修改sorttable.js中的代码。您还可以找到其他可用资源来实现这一点。我尝试了datatables,但它没有解决我的问题。我查看了可排序的代码,但很快就放弃了,因为我不想花一天的时间去弄清楚它在内部是如何工作的。我目前正在尝试使用vanilla JS并使用部分sorttable逻辑。我终于让它与您的答案的修改版本一起工作。谢谢有些函数必须使用严格模式(即不支持所有函数)花费了我相当长的时间。。。浏览器支持很烦人:\