【问题标题】:Sorting numbers in table with javascript用javascript对表格中的数字进行排序
【发布时间】:2018-05-27 11:08:46
【问题描述】:

我想按降序对我的表 ID 编号进行排序。 当用户单击排序文本时,排序必须有效,但我找不到此问题的解决方案。 这是我的JS代码... 还有一个问题:删除表格行时,删除函数不会删除最后一个 tr 元素。

$(function(){
    var tableHead =
        "<table>" +
            "<tr>" +
             "<th class='sort'>Id sort</th><th>Name</th><th>Surname</th><th>Birthday</th><th>Filter</th><th class='addList'>+</th>" +
            "</tr>" +
        "</table>";

    $('body').html(tableHead);

    var name = "<input type='text' class='name' placeholder='First name'>";
    var surname = "<input type='text' class='surname' placeholder='Surname'>";
    var bDayDate ="<input type='date' class='bDayDate' placeholder='Bday'>";
    var del = "Delete";
    var addList = $('.addList');
    var idNum = 0;
    var arrNum= [];

    addList.on("click", function(){
        idNum++;
       var tr = $("<tr></tr>");

        for(var i = 0; i < 6; i++){
            var td = $("<td></td>");
            tr.append(td);

            switch (i){
                case 0:
                    td.addClass('num' + idNum);
                    td.html(idNum);
                break;
                case 1: td.html(name);
                break;
                case 2: td.html(surname);
                break;
                case 3: td.html(bDayDate);
                break;
                case 4: td.html(1);
                break;
                case 5:
                    td.addClass('delete');
                    td.html(del);
                break;
                default:
                    return "OooPs!!";
            }
        }

        $('.sort').on("click", function(){
            arrNum.push(idNum);
            arrNum.sort(function(a, b){return b - a});
            for(var j = 0; j < arrNum.length; j++){
                $('.num'+j).html(arrNum[j])
            }
        });

        $('.delete').on("click", function(){
           $(this).parent().remove();

        });

        $('table').append(tr);
    });

});

【问题讨论】:

  • 欢迎来到 SO,很好地表达了第一篇文章。您可以在下面查看我的答案。

标签: javascript jquery sorting html-table


【解决方案1】:

您的脚本中有多个问题,但您询问的是(排序)。

arrNum.push(idNum); - 点击排序时调用一次

要修复它,请在 addList 中单击关闭。

您的最后一行问题来自于您在实际附加行之前添加了删除事件。

排序的另一个最后一行问题与您从 1 开始计算元素的事实有关,而您的循环从 0 开始 ($('.num'+j).html(arrNum[j]) ->需要加一个+1)。

以下代码可以解决您所问的所有问题:

$(function(){
    var tableHead =
        "<table>" +
            "<tr>" +
             "<th class='sort'>Id sort</th><th>Name</th><th>Surname</th><th>Birthday</th><th>Filter</th><th class='addList'>+</th>" +
            "</tr>" +
        "</table>";

    $('body').html(tableHead);

    var name = "<input type='text' class='name' placeholder='First name'>";
    var surname = "<input type='text' class='surname' placeholder='Surname'>";
    var bDayDate ="<input type='date' class='bDayDate' placeholder='Bday'>";
    var del = "Delete";
    var addList = $('.addList');
    var idNum = 0;
    var arrNum= [];

    addList.on("click", function(){
        idNum++;
        arrNum.push(idNum);
       var tr = $("<tr></tr>");

        for(var i = 0; i < 6; i++){
            var td = $("<td></td>");
            tr.append(td);

            switch (i){
                case 0:
                    td.addClass('num' + idNum);
                    td.addClass('numHere');
                    td.html(idNum);
                break;
                case 1: td.html(name);
                break;
                case 2: td.html(surname);
                break;
                case 3: td.html(bDayDate);
                break;
                case 4: td.html(1);
                break;
                case 5:
                    td.addClass('delete');
                    td.html(del);
                break;
                default:
                    return "OooPs!!";
            }
        }        

        $('table').append(tr);               

        $('.delete').on("click", function() {
           $(this).parent().remove();
        });
    });
    
    $('.sort').on("click", function(){    
      arrNum.sort(function(a, b){return b - a});
      for(var j = 0; j < arrNum.length; j++){
        $('.num'+(j + 1)).html(arrNum[j])
      }
    });
    });
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

但是:还有其他重要的问题。例如,您每次单击“+”时都在添加事件。结果是,如果您添加 99999 行,您将在单击排序时进行 99999 次排序(只需添加一个 console.log 并检查 :))。结果是正确的,但是您正在无用地杀死资源。我的建议是,如果你真正想要使用的东西,请稍微重写一下。如果是作业什么的……没关系。

【讨论】:

  • 感谢您的回复,但在排序过程中我需要对所有行进行排序,而不仅仅是数字,但您的回答给了我一些新想法)))
  • 我期待...正如我所说,我只解决了您的要求:)。如果您需要其他帮助,请发布问题:)。我的建议是以不同的方式处理这个问题。您可以在 dom 中重新制作元素,而不是更改值。我会创建一个容器,将数据保存在一个数组中(就像你做的那样)——你也可以从 html 中取回它,但把它保存在 js 中会有所帮助,除非你有内存问题——每次有人点击你在数组上操作的任何东西,清空容器并再次创建所有内容。当然,根据目标可能会有更好的方法(这是最简单的)。
猜你喜欢
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2018-03-29
  • 2012-12-25
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多