javascript - 使用 javascript 或 jquery 根据表头列对表行进行排序

标签 javascript jquery html html-table

我有这样的东西

<table>
    <thead>
        <tr>
            <th>S.L.</th>
            <th>name</th>
        </tr>
    </thead>

    <tbody>
        <tr>
            <td>1</td>
            <td>Ronaldo</td>
        </tr>
        <tr>
            <td>2</td>
            <td>Messi</td>
        </tr>
        <tr>
            <td>3</td>
            <td>Ribery</td>
        </tr>
        <tr>
            <td>4</td>
            <td>Bale</td>
        </tr>
    </tbody>
</table>

我想要的是对 <tr> 进行排序的 <tbody>当点击 th按照下面的升序和降序交替排列th点击。

  1. 如果有人点击 S.L th然后它显示表行 每次点击时先降序再升序。
  2. 点击时Name th它应该以降序显示名称 顺序,然后升序,各自不变 S.L

这里是 fiddle

最佳答案

您可能希望看到此页面:
http://blog.niklasottosson.com/?p=1914

我想你可以这样做:

演示:http://jsfiddle.net/g9eL6768/2/

HTML:

 <table id="mytable"><thead>
  <tr>
     <th id="sl">S.L.</th>
     <th id="nm">name</th>
  </tr>
   ....

JS:

//  sortTable(f,n)
//  f : 1 ascending order, -1 descending order
//  n : n-th child(<td>) of <tr>
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; // flag to toggle the sorting order
var f_nm = 1; // flag to toggle the sorting order
$("#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);
});

希望这对您有所帮助。

关于javascript - 使用 javascript 或 jquery 根据表头列对表行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033294/

相关文章:

javascript - 自定义下拉菜单不适用于链接

javascript - 有没有一种方法可以识别何时使用 jQuery 将文本拖放到输入元素中?

div 的 jQuery 数组

javascript - 使用 material-ui 库 react 渲染问题

JavaScript: RegEx - 不要返回 match1 match2 等

jquery - 替换 Ajax jQuery 表单中的撇号

html - 在 html 表格中叠加图像

javascript - 如何在 Google Geocharts 中为国家/地区添加 2-3 行数据

javascript - 在 Javascript/JQuery 中,如何读取 JSON 文件?

javascript - 如何使用 jQuery 过滤数据表的年份和月份?