簡體   English   中英

僅對表格的幾行進行排序-jQuery / JavaScript

[英]Sort only few rows of table - jquery/ javascript

我只想排序子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>

JavaScript代碼:

$('#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;
           });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM