0

バグの行は次のとおりです。

contxt.replaceWith(safe_copy[id]).prepend("<span class='error'>"+jsonObj.data+"</span>");

replaceWithステートメントは問題なく動作しますが、データは ' ' になりませんprepended

より完全なコード:

contxt = $(this).parents('div[style^="display"]');
id = $(this).attr('id');

        $.ajax({
                url: "/submit/myposts",
                type: "POST",
                data: "action=edit&post="+$(this).attr('id').match(/[0-9]+/)[0]+"&data="+encodeURIComponent(text),
                success: function(data){
                    loading.remove();
                    jsonObj = $.parseJSON(data);

                    if(jsonObj.code == "0")
                        block.html(jsonObj.data);
                    else
                        contxt.replaceWith(safe_copy[id]).prepend("<span class='error'>"+jsonObj.data+"</span>");
                },
                error: function(){
                    loading.remove();
                    contxt.replaceWith(safe_copy[id]).prepend("<span class='error'>An error occurred. Please try again.</span>");
                }
            });
4

2 に答える 2

2

.replaceWith()元の jQuery オブジェクト (ページから削除されたもの) を返すため、それにチェーンすると、追加されたコンテンツではなく、削除されたコンテンツで動作します。

jQueryドキュメントから.replaceWith()

.replaceWith() メソッドは、ほとんどの jQuery メソッドと同様に、jQuery オブジェクトを返すため、他のメソッドをそれに連鎖させることができます。ただし、元の jQuery オブジェクトが返されることに注意してください。このオブジェクトは、それを置き換えた新しい要素ではなく、DOM から削除された要素を参照します。

あなたのコード/HTMLを完全に理解しているとは言えませんが、これは可能な回避策の1つかもしれません:

var newContent = $(safe_copy[id]).prepend("<span class='error'>"+jsonObj.data+"</span>");
contxt.replaceWith(newContent);
于 2012-08-08T19:47:15.857 に答える
0

私は次の2つの問題を疑った:

a. Either the object being returned by replaceWith() was not same as the new node added, or
b. The return object was being regenerated using the original selection criteria

DOM からヤンクされた元のオブジェクトへのハンドルがまだ残っていることがわかります。これはドキュメントhereで確認されています。

選択を実行して新しいノードへの参照を再度取得し、prepend 操作を実行するだけです。説明したシナリオでは、prepend を replaceWith() にチェーンすることはできません。このアプローチが機能することを示す次のフィドルの例を確認してください。

http://jsfiddle.net/shaikhtabrez/BbgXW/7/

于 2012-08-08T20:08:45.557 に答える