2009-09-18 13 views
14

Ich nahm eine HTML-Tabelle, auf die ich alternative Zeilenfarben anwende, und fügte jquery table sorter hinzu, damit Benutzer die Tabelle sortieren können.jquery tablesorter plugin - Behalten Sie alternative Zeilenfarben bei

Das Problem ist, dass die alternativen Zeilenfarben jetzt alle durcheinander sind, da es (basierend auf der Sortierung) mehrere Zeilen mit der gleichen Hintergrundfarbe gibt.

Gibt es eine Möglichkeit, die alternative Zeilenfarbe mit jquery Table Sorter zurückzusetzen?

+0

Ich finde die einfachste Art und Weise einfach ist durch die Tabelle zu scannen, wenn Sie fertig Sortierung und abwechselnd die Klassennamen für die richtigen L & F. –

+0

Ich folge dir nicht hier. Es sieht so aus als ob Jquery die ganze Sortierung erledigt. Wo bekommt man einen "Haken" um die Tabelle neu zu setzen? – leora

+0

Kann ich eine andere Tabellenkomponente anstelle von jquery tablesorter vorschlagen? –

Antwort

48

Es gibt bereits ein Standard-Widget zebra, das in den Kern eingebaut ist und die Klassen odd und even auf alternierende Zeilen anwendet. Es funktioniert, ob Sie class=even/odd zu der HTML-Datei hinzugefügt haben oder nicht.

Es ist wirklich einfach einzurichten. Ich folgte einfach den Anweisungen auf dem table sorter website und modifiziert dann das Dokument-Ready-Funktion auf die folgenden:

<script type="text/javascript"> 
$(document).ready(function() 
    { 
     $("#myTable").tablesorter({ 
    widgets: ['zebra'] 
    }); 
    } 
); 
</script> 

ich ein Beispiel gemacht, während die Frage zu beantworten. Sie können view the result in action oder see the example code.

1

Wie wäre:

function fixStripes() { 
    var i = 0; 
    var rowclass; 
    $("table tr").each(function() { 
      $(this).removeClass("odd even"); 
      rowclass = (i%2 == 1) ? "odd" : "even"; 
      $(this).addClass(rowClass); 
     }); 
} 

$("table").bind("sort", fixStripes); 

Ach ja, und wenn Sie eine wirklich einfache Lösung wollen, können Sie Ihren Atem für diese CSS Pseudo-Klasse halten konnte von allen großen Browsern abgeholt werden:

table tr:nth-child(n+1) { 
    color: #ccc; 
} 

Aber meine Vermutung basiert darauf, wie FF und Unternehmen CSS für dynamisches HTML behandeln, würde es Ihre Streifen Onload setzen, aber nicht das CSS nach dem Sortieren anwenden. Aber ich würde es gerne wissen.

+0

Denken Sie, dass Sie auch '$ (this) .removeClass ('odd even')' brauchen, um sicherzustellen, dass jede Zeile korrekt zurückgesetzt wird. – dcrosta

+0

Ich habe das gerade erkannt! Ich bin zurück für die Bearbeitung. gut aussehen. – Anthony

6

Basierend auf Anthony Antwort, sondern als Einzeiler (meist) neu formuliert:

function fixStripes() { 
    $('table tr').removeClass('odd even') 
     .filter(':even').addClass('even').end() 
     .filter(':odd').addClass('odd'); 
} 

$("table").bind("sort", fixStripes); 

JQuery Anrufe wie oben „verkettet“ werden können, um die ausgewählten Elemente zu begrenzen Operationen wie filter() verwenden und .end() zu "Zurücksetzen" auf die letzte Auswahl. Anders gesagt, jede .end() "macht" die vorherige .filter() rückgängig. Das letzte .end() bleibt stehen, da danach nichts mehr zu tun ist.

+0

Das sollte '$ ('table tr')' – Anthony

+0

Ganz richtig, danke für den Haken. – dcrosta

+1

BTW, tablesorter scheint nun sortStart und sortEnd aufzurufen anstatt nur zu sortieren. –

5

Um die Zebrastreifen zu erhalten, nachdem eine Sortierung stattgefunden hat, müssen Sie das Zebra-Widget erneut auslösen.

$('#myTable') 
.tablesorter({ widgets: ['zebra'] }) 
.bind('sortEnd', function(){ 
    $("#myTable").trigger("applyWidgets"); 
}); 

Dies ist weniger ein Hack, wie Sie die Logik der Zebra-Widget Wiederverwendung werden, anstatt sie zu replizieren.

Hinweis: Diese Art der Problemumgehung ist nur in Fällen erforderlich, in denen das standardmäßige Zebra-Widget fehlschlägt. Ich habe in den meisten Fällen festgestellt, dass dieser Hack nicht erforderlich ist, da das Widget nach dem Sortieren korrekt funktioniert.

+0

+1 Für die Arbeitslösung –

1

Überarbeitete und Neueste Arbeitslösung - eingebaute * Dies wird auch die Änderung der Farbe auf Klick aktivieren. *

<script type="text/javascript"> 
    $(document).ready(function() { 

    $('#tblLookupResult').tablesorter({ widthFixed: true, sortList: [[0, 0], [0, 1], [0, 2]], theme: 'blue', widgets: ['zebra'] }) 
          .tablesorterPager({ container: $("#pager"), size: $(".pagesize option:selected").val() }); 

    $('#tbltable1 tbody tr').live('click', function() {    
        if ($(this).hasClass('even')) { 
         $(this).removeClass('even'); 
         $(this).addClass('ui-selected'); 
        } 

        else if ($(this).hasClass('odd')) { 
         $(this).removeClass('odd'); 
         $(this).addClass('ui-selected'); 
        } 
        else { 
         $(this).removeClass('ui-selected'); 
         $(".tablesorter").trigger("update"); 
         $(".tablesorter").trigger("applyWidgets");       
        } 

     }); 

    }); 
</script> 

Nun sollte alles selbst kick out!

+0

Danke, der .trigger ("update"); ist was ich gesucht habe. – Lucretius

0

Via CSS:

table.tablesorter tr:nth-child(even) { 
     background-color: #ECFAFF; 
    }