没有JQuery和两个功能,如何简化代码?

时间:2018-11-28 19:26:05

标签: javascript

我的问题是:按表中的标题对列进行排序。我编写了代码,但是我想简化这一点,而不必使用JQuery和两个函数。也许可以在不乘以负数的情况下进行排序,也可以不使用jquery脚本。所以,我需要清理我的js代码并使其成为Vanila js

html:

 <table id="mytable"><thead>
        <tr>
           <th id="sl">S.L.</th>
           <th id="nm">name</th>
        </tr>
       </thead>
      <tbody>
        <tr>
           <td>1</td>
           <td>Ronaldo</td>
        </tr>
        <tr>
         <td>5</td>
         <td>Abc</td>
      </tr>
        <tr>
           <td>2</td>
           <td>Messi</td>
        </tr>
        <tr>
           <td>3</td>
           <td>Ribery</td>
        </tr>
        <tr>
           <td>20</td>
           <td>Bale</td>
        </tr>
      </tbody>
       </table>

JS:

$("#sl").click(function(){
        f_sl *= -1; // toggle the sorting order
        var n = $(this).prevAll().length;
        sortTable(f_sl,n);
});

$("#nm").click(function(){
        f_nm *= -1; // toggle the sorting order
        var n = $(this).prevAll().length;
        sortTable(f_nm,n);

});


function sortTable(f,n){
    var rows = $('#mytable tbody  tr').get();

    rows.sort(function(a, b) {

        var A = getVal(a);
        var B = getVal(b);

        if(A < B) {
            return -1*f;
        }
        if(A > B) {
            return 1*f;
        }
        return 0;
    });

    function getVal(elm){
        var v = $(elm).children('td').eq(n).text().toUpperCase();
        if($.isNumeric(v)){
            v = parseInt(v,10);
        }
        return v;
    }

    $.each(rows, function(index, row) {
        $('#mytable').children('tbody').append(row);
    });
}
var f_sl = 1; 
var f_nm = 1;

0 个答案:

没有答案