Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按两列对HTML表排序_Javascript_Jquery_Html_Sorting - Fatal编程技术网

Javascript 按两列对HTML表排序

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

我在一个表中有几个列,比如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 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猫


这是我无法实现的。如何进行排序?

要按多个列进行排序,请按如下方式编写比较函数:

(比较函数传递两行)

  • 比较第1行第1列和第2行第1列
    • 如果它们不同,则返回结果(一个+ve或-ve数字)
  • 比较第1行第2列和第2行第2列
    • 如果它们不同,则返回结果(一个+ve或-ve数字)
  • 对其余列重复此操作
  • 返回0
  • 下面的示例演示如何编写按两列排序的比较函数。可以使用循环或递归按n列排序

    $(函数(){
    函数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