2012-02-12 51 views
1

我正在使用jQuery tablesorter對錶進行排序,並希望在排序後在行組之間產生某種分離。例如,如果我使用標題,類別和年份表,一旦排序,某年的所有行將在其他行之間填充一定數量的填充。jQuery Tablesorter - 可以對'排序'行進行分組嗎?

如:

Title Cat 2012 
Title Cat 2012 
Title Cat 2012 


Title Cat 2011 
Title Cat 2011 
Title Cat 2011 


Title Cat 2010 
Title Cat 2010 

我想這將有建立一個小部件,並比較各行的價值做的,如果行不匹配先前的值,那麼就應適用某種一些填充但我有點不知所措。

JSBIN: http://jsbin.com/osehoy

任何方向/幫助將不勝感激,謝謝!

+0

你可以發佈html和jsfiddle嗎? – elclanrs 2012-02-12 18:16:19

+0

@elclanrs嗨 - jsbin好嗎?我也認爲這個小部件代碼絕對是正確的路徑,但我沒有搞清楚 - http://tablesorter.com/docs/example-widgets.html – waffl 2012-02-12 18:20:18

回答

1

我不確定你是否想在兩者之間添加一個空行或者只是增加行高,所以我選擇了後者。這是我做的小部件和demo

$.tablesorter.addWidget({ 
    id: 'spacer', 
    format: function(table) { 
     var c = table.config, 
     $t = $(table), 
     $r = $t.find('tbody').find('tr'), 
     i, l, last, col, rows, spacers = []; 
     if (c.sortList && c.sortList[0]) { 
      $t.find('tr.spacer').removeClass('spacer'); 
      col = c.sortList[0][0]; // first sorted column 
      rows = table.config.cache.normalized; 
      last = rows[0][col]; // text from first row 
      l = rows.length; 
      for (i=0; i < l; i++) { 
       // if text from row doesn't match last row, 
       // save it to add a spacer 
       if (rows[i][col] !== last) { 
        spacers.push(i-1); 
        last = rows[i][col]; 
       } 
      } 
      // add spacer class to the appropriate rows 
      for (i=0; i<spacers.length; i++){ 
       $r.eq(spacers[i]).addClass('spacer'); 
      } 
     } 
    } 
}); 

$('table').tablesorter({ 
    widgets : ['spacer'] 
});​ 

更新:我的tablesorter的叉可以跨多個tbodies排序,所以上面的腳本不無稍作修改rows = table.config.cache[0].normalized;工作 - 在這裏是一個updated demo是與我的叉子一起工作。上面的代碼將與原始的tablesorter插件一起工作。

+0

恰恰是我在尋找的,太棒了,謝謝! – waffl 2012-02-23 16:48:22

相關問題