只对表的几行进行排序 - jquery/ javascript

Sort only few rows of table - jquery/ javascript

本文关键字:排序 jquery javascript 几行      更新时间:2023-09-26

我只想对子tr的数据进行排序,不想移动父tr。只有子 tr 会移动到下一个父级。我有一张这样的表:

 <table>
    <tr>
        <th id="column1">Column 1</th>
        <th id="column2">Column 2</th>
        <th>Column 3</th>
    </tr>
    <tr class="parent">
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
    <tr class="child">
        <td>96</td>
        <td>102</td>
        <td>121</td>
    </tr>
    <tr class="child">
        <td>455</td>
        <td>422</td>
        <td>410</td>
    </tr>
    <tr class="child">
        <td>212</td>
        <td>430</td>
        <td>203</td>
    </tr>
    <tr class="parent">
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
    <tr class="child">
        <td>363</td>
        <td>581</td>
        <td>231</td>
    </tr>
    <tr class="child">
        <td>632</td>
        <td>115</td>
        <td>212</td>
    </tr>
</table>

脚本代码:

$('#column1, #column2')
    .each(function(){
        var th = $(this),
        thIndex = th.index(),
        inverse = false;
        th.click(function() {
            // sorting classes don't work here b/c this function gets called repeatedly - moved to afterRequest: function
            table.find('tr.parent td').filter(function(){
                return $(this).index() === thIndex;
            }).sortElements(function(a, b){
                return $.text([a]) > $.text([b]) ?
                    inverse ? 1 : -1
                    : inverse ? -1 : 1;
            }, function(){
                // parentNode is the element we want to move
                return this.parentNode;
                //  this.parentNode
            });
            inverse = !inverse;
        });
    });

小提琴:演示

每个"部分"包装在自己的<tbody />

<tbody>
    <tr class="parent"><!-- ... --></tr>
    <tr class="child"><!-- ... --></tr>
    <tr class="child"><!-- ... --></tr>
    <tr class="child"><!-- ... --></tr>
</tbody>
<tbody>
    <tr class="parent"><!-- ... --></tr>
    <tr class="child"><!-- ... --></tr>
    <tr class="child"><!-- ... --></tr>
</tbody>
<!-- ... -->

并对每个<tbody />进行排序

$("tbody").each(function() {
    $(this).find('tr:not(.parent) td') // ignore the "parent" row
           .filter(function () {
               return $(this).index() === thIndex;
           }).sortElements(function (a, b) {
               return $(a).text() > $(b).text() ? inverse ? -1 : 1 : inverse ? 1 : -1;
           }, function () {
               return this.parentNode;
           });
});