2009-08-20 12 views
1

Ich habe einen jQuery-Code geschrieben, um die "slideUp" -Animation zu verwenden, wenn Zeilen aus einer Tabelle gelöscht werden. Damit die Animation glatt erscheint, habe ich den Inhalt jedes TD in der Zeile mit DIV-Tags umschlossen und die SlideUp-Funktion auf den DIVs aufgerufen, wobei nach Beendigung der Animation die eigentlichen TDs entfernt wurden. Der Code dafür lautet wie folgt:Animieren des Löschens von Tabellenzeilen in jQuery

$("tr[id$=" + rowID + "]").children("td").each(function() { 
    $(this).children("div").slideUp(function() { 
     $(this).parent().remove(); 
    });   
}); 

So weit, so gut. Allerdings bemerkte ich, dass dieser Code nicht mit dem tatsächlichen TR nicht entfernt, nur seinen Inhalt, so habe ich die folgende Zeile die TR zu entfernen:

$("tr[id$=" + rowID + "]").remove(); 

Das Problem ist, dass, nachdem ich die Zeile oben hinzugefügt, die Animation beenden Arbeiten. Mit anderen Worten, die Reihe verschwindet einfach ohne den schönen Gleiteffekt. Weiß jemand, warum das so ist und wie man es umgehen kann?

+0

Wo haben Sie diese Zeile hinzufügen? Ich habe es nach dem Eltern() hinzugefügt. Remove() und es hat gut für mich gearbeitet. – seth

+0

Hey Sett, ich habe die Zeilenentfernungszeile direkt nach der vorherigen Zeile hinzugefügt. Danke für die schnelle Rückmeldung! –

Antwort

1

Weil Sie die tr entfernen, die alle animierten Elemente enthält. Keine Elemente mehr, keine Animation mehr. Vorausgesetzt, dass alle slideUp s die gleiche Zeit benötigen, können Sie wahrscheinlich den Callback von $(this).parent().remove() auf $(this).closest('tr').remove() ändern.

+0

Ich bin immer erstaunt über die Geschwindigkeit der Antwort auf dieser Seite. Danke für die schnelle Antwort, Hobbs. Ich verstehe, was du über die Folgen des Entfernens des tr meinst, das die animierten Elemente enthält, aber ich dachte, dass diese Operationen in der Folge passiert sind ... Ich denke, das ist nicht so. Die asynchrone Natur von Javascript bringt mich jedes Mal! Ihr Trick hat übrigens ganz gut geklappt. Vielen Dank! –

+0

Nun, es sind wirklich die Animationsaufrufe (zB SlideUp), die asynchron sind, weil sie ihre Arbeit in Timer-Events erledigen ... aber sowieso, sie warten nicht auf die Fertigstellung, also hat dein Remove bereits geschossen, bevor die Animation überhaupt einen bekam Chance, richtig anzufangen. – hobbs