2009-07-29 9 views
0

列の先頭フィールドでテーブルを並べ替える必要があります。行を同じ場所に保ちたいのですが、列の順序は列見出しフィールド(td)に基づいてソートする必要があります。例についてはjQuery:行ではなくテーブル列を並べ替える

:ソート前

テーブル:

assign1|assign3|assign2|assign4| 
assign1|assign3|assign2|assign4| 
assign1|assign3|assign2|assign4| 
assign1|assign3|assign2|assign4| 
assign1|assign3|assign2|assign4| 
assign1|assign3|assign2|assign4| 
assign1|assign3|assign2|assign4| 

とソート後: @seth

assign1|assign2|assign3|assign4| 
assign1|assign2|assign3|assign4| 
assign1|assign2|assign3|assign4| 
assign1|assign2|assign3|assign4| 
assign1|assign2|assign3|assign4| 
assign1|assign2|assign3|assign4| 
assign1|assign2|assign3|assign4| 

を私は(変更のオードをソートする必要がありr)のヘッダー付き列。

@CMS 私はtablesorterプラグインとこ​​のプラグインの並べ替え行を試しました。列の順序を昇順または降順に変更することを意味します。

しかし私の問題は異なります。昇順または降順でヘッダーセルの列の順序を変更する必要があります。

問題の私の例を見てください。

+0

ヘッダテキストは、その列のセルと同じになりますか?または、セル内のテキストは異なるが、ソートはヘッダーのみに基づいている必要がありますか? – seth

答えて

1

は、このプラグインの外観を与えます。おそらく最もエレガントでクリーンではありませんが、機能します。

// sorting function for the headers 
function th_sorter(a, b) { 
    // just compare the text 
    var cmp = $(a).text() > $(b).text(); 
    if (cmp) { 
    return 1; 
    } 
    else { 
    return $(a).text() === $(b).text() ? -1 : 0; 
    } 
} 

var sorted = [], temp=[]; 
// first sort the 1st row so we can figure out what goes where 
$('table tr:first').each(
    function(i, tr) { 
     $(tr).children('td').each(function(idx,node) { 
     $(node).data('orig', idx); 
     }).sort(th_sorter).each(function(idx, node) { 
     sorted.push({ 
      html: $(node).html(), 
      idx: $(node).data('orig') 
      }); 
     }); 
}); 

// now re-arrange the deck chairs 
$('table tr').each(function(i, tr) { 
    // double each, once to capture and once to move           
    $(tr).children('td').each(function(idx, node) { 
    temp[idx] = $(node).html(); 
    }).each(function(idx,node) { 
    $(node).html(temp[ sorted[idx].idx ]); 
    }); 
    temp = []; 
}); 

Demo page

4

[OK]を、ここで私が手早く何かがあります:

+0

ちょうどこのソリューションを使用し、それは私のために完全に働いた。巨大な、巨大な感謝! – Dan

関連する問題