jQuery slideUp()。remove()は、削除が発生する前にSlideUpアニメーションを表示しないようです


94

私はこのJavaScript行を使用しており、私が目にしている動作は、selectedLi「上にスライド」することなく即座に消えるというものです。これは私が期待した動作ではありません。

selectedLi削除する前にスライドを上に移動するにはどうすればよいですか?

selectedLi.slideUp("normal").remove();

回答:


197

SlideUpへのコールバック引数に削除の呼び出しを入れることで、それを修正できるでしょうか?

例えば

selectedLi.slideUp("normal", function() { $(this).remove(); } );

4
「遅い」と「速い」だけが速度であることに注意してください。他の速度は、いずれかのミリ秒であることを必要とするか、または、彼らは400にデフォルト設定されますkeyframesandcode.com/resources/javascript/deconstructed/jquery/...
bendman

19

より明確にする必要があります。「これ」(私は同意するはずです)と言うのではなく、これを行う必要があります。

$("#yourdiv").slideUp(1000, function() {
    $(this).remove();
});

2
申し訳ありません=私は自分のIDを削除するのを忘れました:$( '#yourdiv')。slideUp(1000、function(){$( '#yourdiv')。remove();});
ブレイク

12
$( "#yourdiv")の代わりに$(this)を使用すると、jQueryがノードを探す必要がないため、より最適化されます。
MaximeBernard 2013

$("#yourdiv")代わりに使用すること$(this)は完全に冗長であり、それがこのコードがOPの問題を修正する理由ではありません。このコードはcompleteコールバックを使用するため、問題を修正します。
ギャビン

8

最も簡単な方法は、次の例のように、slideUp内の「remove()」関数を、他の人が言っているようなパラメーターとして呼び出すことです。

$("#yourdiv").slideUp("normal", function() {
    $(this).remove();
});

SlideUpが終了する前にremove()が実行されないようにするには、無名function()内で呼び出す必要があります。別の同等の方法は、jQuery関数「promise()」を使用することです。私のように自明のコードが好きな人にとってはより良いです;)

$("#yourdiv").slideUp("normal").promise().done(function() {
    $(this).remove();
});

3

promiseを使用すると、複数のアニメーションが完了するのを待つこともできます。例:

selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
    selectedLi.remove()
})

-2
selectedLi.slideUp(200, this.remove);

1
私はテストしました-上にスライドしても要素は削除されません。
Konstantin Spirin

要素を効果的に非表示にしますが、実際にはDOMから削除しません。
andreszs 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.