2016-04-06 7 views
1

Ich versuche mit dem tablesorter-plugin meine Tabelle mit Zeilen zu sortieren, wobei die letzte Zelle sich über mehrere Spalten erstreckt.tablesorter td-colspan in tbody

In der Spanning-Spalte befindet sich eine innere Tabelle, die mehrere Zellen und verdeckte Zeilen enthält. Wenn die Antwort des Tabellenheaders 1 auf die Spalte 1 sortiert wird, antwortet die Antwort des Tabellenheaders 2 auf die Spalte 2 und der Tabellenheader 3 auf die Spanning-Spalte, und textExtraction sortiert die Spanning-Spalte. Aber es gibt mehr Tabellenüberschriften und sie sollten in der inneren Tabelle sortieren, anstatt in der nächsten Spalte.

ich hier ein kleines Beispiel gemacht habe: http://jsfiddle.net/frankmyhre/aoLgu7f9/

$('table').tablesorter({ 
    textExtraction: { 
     1: function(node){ return $(node).find('.cell1').eq(0).text(); }, 
     2: function(node){ return $(node).find('.cell2').eq(0).text(); } 
    } 
}); 

es zu vereinfachen, ist es das, was ich (von der Geige) zu erhalten bin versucht:

Der "Name" -header sortiert die Name-Spalte (Spalte 0)
Der "Phone" -Kopf sortiert die Spanning-Spalte (Spalte 1) nach dem Wert des ersten Vorkommens von cell1-class Der "Type" -Kopfsortiert die Spannungskolonne (Spalte 1) b y Blick auf den Wert des ersten Auftretens von cell2-Klasse

+0

Wenn ein 'colspan' im' tbody' gefunden wird, verwendet tablesorter zur Zeit die Einstellung 'duplicateSpan' (http://mottie.github.io/tablesorter/docs/#duplicatespan), um die Zelle entweder zu setzen Wert für alle übergreifenden Zellen oder eine leere Zeichenfolge. Ich muss die Funktion aktualisieren, damit sie stattdessen die 'textExtraction'-Funktion aufruft. – Mottie

Antwort

0

Die Gabel von tablesorter hat Aktualisierung, die textExtraction Funktion zu verwenden, wenn anstelle des Einstellens der Zelle Wert auf einen leeren String gesetzt, wenn die duplicateSpan Option false gesetzt (docs) - aber diese Änderung ist derzeit nur im Master-Zweig des Repositorys verfügbar und soll mit Version 2.25.8 freigegeben werden.

So können Sie dies tun (demo, mit this file):

$('table').tablesorter({ 
    debug: true, 
    duplicateSpan: false, 
    textExtraction: function(node, table, cellIndex) { 
    if (cellIndex > 0) { 
     // this works because cell1 and cell2 match the table 
     // column zero-based index 
     return $(node).find('.cell' + cellIndex).eq(0).text(); 
    } 
    return node.textContent; 
    } 
}); 

Hinweis: Diese Methode verwendet die textExtraction Funktionsdaten aus der ersten Zelle 1 oder cell2 zu greifen, so dass die Zellen mit „zu Hause“ sind den Inhalt "Club" und "Büro" ignorieren. Wenn Sie einschließen möchten, dass dann die Funktion wie folgt ändern (demo):

$('table').tablesorter({ 
    duplicateSpan: false, 
    textExtraction: function(node, table, cellIndex) { 
    if (cellIndex > 0) { 
     // this works because cell1 and cell2 match the table 
     // column zero-based index 
     var txt = ''; 
     $(node).find('.cell' + cellIndex).each(function(){ 
     txt += this.textContent + ' '; 
     }); 
     return txt; 
    } 
    return node.textContent; 
    } 
}); 

Anmerkung 2: die debug Option ist true in den Demos, so dass Sie an der Konsole und sehen Sie den Unterschied in diesen beiden Funktionen suchen.

+0

Hey mottie, danke für die tolle Antwort, es hat perfekt funktioniert. Ich habe versucht, eine zusätzliche Spalte zur Tabelle hinzuzufügen (nicht im verschachtelten) und dachte, es würde funktionieren, wenn ich den Index von 0 auf 1 ändere, aber sortiert nur nach der ersten (ID) und dritten (Spalte) siehe http://jsfiddle.net/frankmyhre/aoLgu7f9/. Ich kann im debug sehen, dass wenn ich die ID-Spalte hinzufügen, die Typ-Spalte nicht vorhanden ist. – frankmyhre

+0

Die Klassennamen "cell1" und "cell2" müssen der Spalte entsprechen, in der sie sich befinden, also ändern Sie diese Klassen in "cell2" bzw. "cell3" - [demo] (http://jsfiddle.net/Mottie/aoLgu7f9/) 23 /). – Mottie

+0

Fantastische Mottie, danke. Und vielen Dank für die tollen Beispiele, die Sie für das tabletorter-plugin gemacht haben – frankmyhre