Javascript 按两列对HTML表排序
我在一个表中有几个列,比如a、B、C、D和E列,我需要在HTML页面中显示这些列。在某些页面中,我只需要根据页面的一列来显示排序结果,例如“C”列,它是表的第三列。我可以使用以下代码执行此操作:Javascript 按两列对HTML表排序,javascript,jquery,html,sorting,Javascript,Jquery,Html,Sorting,我在一个表中有几个列,比如a、B、C、D和E列,我需要在HTML页面中显示这些列。在某些页面中,我只需要根据页面的一列来显示排序结果,例如“C”列,它是表的第三列。我可以使用以下代码执行此操作: function Ascending(a, b) { if (a < b) return -1; if (a > b) return 1; return 0; } var rows = $('#table tr').not(':first').get(); $('#table t
function Ascending(a, b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
var rows = $('#table tr').not(':first').get();
$('#table tr').slice(1).remove();
rows.sort(function(rowA, rowB) {
var keyA = $(rowA).children('td').eq(2).text().toUpperCase();
var keyB = $(rowB).children('td').eq(2).text().toUpperCase();
return Ascending(keyA, keyB);
});
仅对C列排序后:
C列E列
1盒
一个苹果
2只狗
2条鱼
2盒
2斧头
2山羊
2答案
6年
7盒
7苹果
7猫
先对C列排序,然后对E列排序:
C列E列
一个苹果
1盒
2答案
2斧头
2盒
2只狗
2条鱼
2山羊
6年
7苹果
7盒
7猫
这是我无法实现的。如何进行排序?要按多个列进行排序,请按如下方式编写比较函数: (比较函数传递两行)
- 如果它们不同,则返回结果(一个+ve或-ve数字)
- 如果它们不同,则返回结果(一个+ve或-ve数字)
$(函数(){
函数sortByColumn3(第1行,第2行){
var v1,v2;
v1=$(第1行).find(“td:eq(2)”).text();
v2=$(第2行).find(“td:eq(2)”).text();
//对于数字,您可以简单地返回a-b,而不是检查大/小/相等
返回v1-v2;
}
函数SortByColumn3和5(第1行、第2行){
VarV1,v2,r;
v1=$(第1行).find(“td:eq(2)”).text();
v2=$(第2行).find(“td:eq(2)”).text();
r=v1-v2;
如果(r==0){
//我们在第1列的值中有一个联系,请比较第2列
v1=$(第1行).find(“td:eq(4)”).text();
v2=$(第2行).find(“td:eq(4)”).text();
如果(v1v2){
r=1;
}否则{
r=0;
}
}
返回r;
}
$(“#按钮1,#按钮2”)。在(“单击”,函数(){
var rows=$(“#table1 tbody tr”).detach().get();
开关(this.id){
案例“button1”:
rows.sort(sortByColumn3);
打破
案例“按钮2”:
rows.sort(sortbycolumn3和5);
打破
}
$(“#表1 t正文”)。追加(行);
});
});代码>
1.
2.
3.
4.
5.
x
Y
2.
Z
鱼
Y
Z
1.
x
盒子
Z
x
7.
Y
猫
x
Y
2.
Z
狗
Y
Z
1.
x
苹果
Z
x
2.
Y
盒子
x
Y
2.
Z
斧头
Y
Z
7.
x
盒子
Z
x
2.
Y
答复
x
Y
7.
Z
苹果
Y
Z
6.
x
年
Z
x
2.
Y
山羊
函数排序表(){
var表,行,切换,i,x,y,a,b,shouldSwitch;
table=document.getElementById(“mytable”);
切换=真;
while(切换){
切换=错误;
行=table.getElementsByTagName(“TR”);
对于(i=0;i<(rows.length-1);i++){
shouldSwitch=false;
/*获取要比较的两个元素,
一个来自当前行,另一个来自下一行:*/
x=行[i].getElementsByTagName(“TD”)[3];
y=行[i+1].getElementsByTagName(“TD”)[3];
//检查两行是否应切换位置:
if(Number(x.innerHTML)Number(b.innerHTML)){
行[i].parentNode.insertBefore(行[j],行[i]);
}
}
}
}
}
分类
身份证件
形象
名称
价格
5cony#51701cony#11702cony#22708cony#87010cony#101704cony#41503cony#31306cony#61609cony#91707cony#7170
您是否介意使用代码标记格式化HTML,以便我们可以看到您希望输出的样子?通过看你的例子,你很难说出你想要达到什么目的,因为它都被挤在一行上。从你的帖子中,你并不完全清楚你想要如何对数据进行排序。编辑你的文章,包括前后的例子。确保它们排列清晰,以便更容易理解。尝试使用项目符号列表。是否尝试实现二次排序(示例中的E列)?您可以检查哪些是c