2011-08-22 14 views
5

Ho provato a creare un widget che possa ordinare un gruppo di righe separatamente all'interno di una tabella e allo stesso tempo fare in modo che il gruppo di righe rimanga con "righe raggruppate". Non riesco a capire come affrontare questo problema ...Tablesorter, ordinamento sottogruppo

MODIFICA: Voglio ordinare le colonne non colspan. ogni gruppo dovrebbe comportarsi come sotto-tavolo

Configurazione di base in jsfiddle, qualcuno può spingermi nella giusta direzione?

EDIT: nuova jsfiddle http://jsfiddle.net/L8bwW/28/

+0

Come vuoi fare il vostro ordinamento? Vuoi ordinarlo su file larghe, quindi su file divise, come il Finder/Explorer che ordina in ordine alfabetico su cartelle e poi su sottocartelle? – Blazemonger

+0

scusa per non essere chiaro, voglio ordinare sulle colonne non colspan. ogni gruppo dovrebbe comportarsi come una tabella secondaria – anderssonola

+0

Quindi le righe larghe (colspan) sono collegate alla singola riga al di sotto di esse? Oppure sono "riparati" e, ad esempio, appaiono come la terza e la sesta riga indipendentemente da come sono ordinati gli altri? – Blazemonger

risposta

4

Ecco un Working example che non utilizza tablesorter.

La chiave è utilizzare l'elemento tbody per raggruppare le righe. Quindi ordina tutte le righe tranne l'ultima, all'interno di ogni tbody.

La tabella potrebbe assomigliare a questo:

<table class="sortable"> 
    <thead> 
     <tr> <th></th> <th>A-head</th> <th>B-head</th> <th>C-head</th> </tr> 
    </thead> 
    <tfoot> 
     <tr> <td></td> <td>A-foot</td> <td>B-foot</td> <td>C-foot</td></tr> 
    </tfoot> 

    <tbody class='sortable'> 
     <tr> <td>DDD</td><td> r1c1</td> <td>r1c2</td> <td>r1c3</td> </tr> 
     <tr> <td>AAA</td><td> r2c1</td> <td>r2c2</td> <td>r2c3</td> </tr> 
     <tr> <td>CCC</td><td> r3c1</td> <td>r3c2</td> <td>r3c3</td> </tr> 
     <tr> <td>BBB</td><td> r4c1</td> <td>r4c2</td> <td>r4c3</td> </tr> 
     <tr> <td colspan="4">summary info for the first group of rows</td> </tr> 
    </tbody> 

    <tbody class='sortable'> 
     <tr> <td>Zorro</td><td> r5c1</td> <td>r5c2</td> <td>r5c3</td> </tr> 
     <tr> <td>Caleb</td><td> r6c1</td> <td>r6c2</td> <td>r6c3</td> </tr> 
     <tr> <td>Momo</td><td> r7c1</td> <td>r7c2</td> <td>r7c3</td> </tr> 
     <tr> <td>Wolfie</td><td> r8c1</td> <td>r8c2</td> <td>r8c3</td> </tr> 
     <tr> <td colspan="4">summary info for rowgroup #2</td> </tr> 
    </tbody> 
    ... 

E una sorta fn per esso potrebbe essere simile a questo:

function SortIt() { 
     jQuery('table.sortable > tbody.sortable').each(function(index,tbody) { 
     var $rowGroup = jQuery(tbody); 

     // select all but the last row in the tbody 
     var rows = $rowGroup.find('tr:not(last-child)').get(); 

     var sortDirection = $rowGroup.is('.sorted-asc') ? -1 : 1; 

     // Set a custom property on each row - 'sortKey', the key to sort. 
     // This example uses the text in the first column. It could use 
     // any column, or any content in the row. 
     jQuery.each(rows, function(index, row) { 
      row.sortKey = jQuery(row).children('td').first().text(); 
     }); 

     // actually sort the rows 
     rows.sort(function(a, b) { 
      if (a.sortKey < b.sortKey) return -sortDirection; 
      if (a.sortKey > b.sortKey) return sortDirection; 
      return 0; 
     }); 

     // retain the summary row - the last one 
     var summaryRow = $rowGroup.find("tr:last-child"); 

     // remove all the rows from the tbody 
     $rowGroup.find("tr").remove(); 

     // append the rows in sorted order 
     jQuery.each(rows, function(index, row) { 
      $rowGroup.append(row); 
      row.sortKey = null; 
     }); 

     // append the final row 
     $rowGroup.append(summaryRow); 

     if (sortDirection == 1) { $rowGroup.addClass('sorted-asc'); } 
     else {$rowGroup.removeClass('sorted-asc'); } 

     }); 
    } 
Problemi correlati