2012-01-26 4 views
4

これは簡単ですね。しかし、どこにでもそのような機能の例を見つけることはできません。問題は、replaceWith()を実行した後、DOMに書き込まれた要素で何かしたいのですが、replaceWith()呼び出しの直後に何かをしようとすると、まだ存在しません私はreplaceWith()が完全に終了したことを確認する必要があります。私はちょうどこのようなものが動作するようにしたい:jQueryのreplaceWith関数をコールバック関数を受け入れるように拡張するにはどうすればよいですか?

$('#foo').replaceWith('some text', function() { 
    //do something else here 
}); 

思考?

$("#myElement").replaceWith(function() { 
 
    // call a function 
 
);

と言葉と内側のないHTMLを置き換えるために:

$.fn.replaceWithCallback = function(replace, callback){ 
    var ret = $.fn.replaceWith.call(this, replace); // Call replaceWith 
    if(typeof callback === 'function'){ 
     callback.call(ret); // Call your callback 
    } 
    return ret; // For chaining 
}; 
+5

はあなたが直後に処理を実行しようとするときに動作していないコードを示してもらえますか? 'replaceWith'は非同期ではないので、これは正常に動作します。 *編集*私はあなたが '#foo'で何かをしようとしているのですが、それを置き換えただけでは存在しません... – lonesomeday

+3

' replaceWith'が非同期でないとコールバックが必要なのはなぜですか? 'replaceWith'を呼び出した直後にメソッドを呼び出すことができます。 – ShankarSangoli

+1

http://stackoverflow.com/questions/2465431/jquery-fadeout-replacewith-animate-almost-working http://stackoverflow.com/questions/5248721/jquery-replacewith-fade-animate – Alex

答えて

4

あなたはreplaceWithが呼び出す独自の関数を作ることができます:

$("#derp").text(function(index, text) { 
 
    // call a function here 
 
    return text.replace('old', 'new'); 
 
});

+3

私は非常に遅く知っています他の人を助けるかもしれない。これはこの質問の正しい解決策ではありません。彼の要件の1つである関数が呼び出されますが、コールバックとして機能しない可能性があります。彼は、 "replaceWith()呼び出しの直後に何かをしようとすると、まだ存在しないので、replaceWith()が完全に終了したことを確認する必要があります**"という要求に明確に言及しています。関数が実行される前に何らかの形でreplaceWithの戻り値として機能するかもしれませんが、それはちょうど運がいいでしょう。だから私はコールバックを作成するためにこのメソッドを使用しないことをお勧めします。 –

+1

@ Jehanzeb.Malik: 'replaceWith'は同期です。私の推測では、彼はキャッシュされたjQueryオブジェクトを使用しようとしていました。 'var $ a = $( '#foo')と似ています。 $ a.replaceWith( 'a'); '。要素がもう存在しないので、 '$ a'を使ってみることはできません。 –

+0

私は同じ問題を抱えていました: 'toUpdate.find( '。inscription')。replaceWith(inscription);' 'initAddInscription(toUpdate.find( '。inscription'));' –

0

行うことによって、単純にコールバック機能を作成します。

関連する問題