我有一个用HTML编写的足球联赛表格,每当我使用下拉列表和输入系统模拟比赛时,该表格都会更新。该系统运行良好,并更新了联赛表中相应球队的价值。
问题在于,更新表中的这些值时,将调用对表进行排序的功能,但它根本不起作用。该功能如下:
function SortTable()
{
var table, rows, switching, i, x, y, shouldSwitch;
table = document.getElementById("liga123");
switching = true;
/* Make a loop that will continue until no switching has been done */
while (switching)
{
/* Start with no switching */
switching = false;
rows = table.rows;
/* Loop through all table rows except the first one, which is the heading */
for (i = 1; i < (rows.length - 1); i++)
{
/* Start saying there should be not switching */
shouldSwitch = false;
/* Get 2 elements to compare, one from current row and another from the next one */
x = rows[i].getElementsByTagName("TD")[9];
y = rows[i + 1].getElementsByTagName("TD")[9];
/* Check if those 2 rows should switch */
if (x.innerHTML() < y.innerHTML())
{
/* Switch, restore the hierarchy by points and break */
shouldSwitch = true;
x = rows[i].getElementsByTagName("TD")[9];
y = rows[i + 1].getElementsByTagName("TD")[9];
break;
}
if (x.innerHTML() == y.innerHTML())
{
/* Change the hierarchy to Goals Difference */
x = rows[i].getElementsByTagName("TD")[8];
y = rows[i + 1].getElementsByTagName("TD")[8];
if (x.innerHTML() < y.innerHTML())
{
/* Switch, restore the hierarchy by points and break */
shouldSwitch = true;
x = rows[i].getElementsByTagName("TD")[9];
y = rows[i + 1].getElementsByTagName("TD")[9];
break;
}
if (x.innerHTML() == y.innerHTML())
{
/* Change the hierarchy to Goals in Favour */
x = rows[i].getElementsByTagName("TD")[6];
y = rows[i + 1].getElementsByTagName("TD")[6];
if (x.innerHTML() < y.innerHTML())
{
/* Switch, restore the hierarchy by points and break */
shouldSwitch = true;
x = rows[i].getElementsByTagName("TD")[9];
y = rows[i + 1].getElementsByTagName("TD")[9];
break;
}
if (x.innerHTML() == y.innerHTML())
{
/* Change the hierarchy to Victories */
x = rows[i].getElementsByTagName("TD")[3];
y = rows[i + 1].getElementsByTagName("TD")[3];
if (x.innerHTML() < y.innerHTML())
{
/* Switch, restore the hierarchy by points and break */
shouldSwitch = true;
x = rows[i].getElementsByTagName("TD")[9];
y = rows[i + 1].getElementsByTagName("TD")[9];
break;
}
if (x.innerHTML() == y.innerHTML())
{
/* Change the hierarchy to Loses */
x = rows[i].getElementsByTagName("TD")[5];
y = rows[i + 1].getElementsByTagName("TD")[5];
if (x.innerHTML() > y.innerHTML())
{
/* Switch, restore the hierarchy by points and break */
shouldSwitch = true;
x = rows[i].getElementsByTagName("TD")[9];
y = rows[i + 1].getElementsByTagName("TD")[9];
break;
}
}
}
}
}
}
if (shouldSwitch)
{
/* If a change must be done, do it and mark it */
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
}
}
}
然后,当调用该函数时,它应该遍历表中的所有行,并首先按更多点进行排序。
该“层级”系统的工作方式如下:如果2个团队的得分相同,则按目标差异排序。如果两支球队的进球差相同,则按有利的进球排序;如果还不够,则按胜利排序,最后按失败排序。
我的问题是该函数在每次匹配后都可以工作,但是没有排序。我在做什么不好?我没有发布排名表,因为它们大约有300行,但是如果需要的话,我会这样做。
顺便说一句,我的代码具有西班牙语的所有ID和注释,所以也许我忘了编辑其中一些