错误行是:
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>");
}
});
答案 0 :(得分:2)
.replaceWith()
返回原始jQuery对象(从页面中删除的对象),因此当您链接到该对象时,它将对已删除的内容进行操作,而不是对已添加的内容进行操作。
来自.replaceWith()
的{{1}}:
与大多数jQuery方法一样,.replaceWith()方法返回 jQuery对象,以便可以将其他方法链接到它上面。然而, 必须注意的是返回原始的jQuery对象。这个 object指的是从DOM中删除的元素,而不是 已取代它的新元素。
我不完全确定我理解您的代码/ HTML,但这可能是一种可能的解决办法:
var newContent = $(safe_copy[id]).prepend("<span class='error'>"+jsonObj.data+"</span>");
contxt.replaceWith(newContent);
答案 1 :(得分:0)
我怀疑以下两个问题:
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链接到replaceWith()。查看以下小提琴示例,显示此方法有效: