所以我在JavaScript方面并不是很擅长,但是这里有一些我很喜欢的东西:
所以,我得到了这个:
$(".post-click").click(function()
{
var classid = $(this).attr('id');
var postid = $(this).attr('id');
postid = postid.replace('post-click-id_', '');
alert("ID: " + classid + " PostID: " + postid);
$(this).replaceWith('<img SRC="assets/img/refresh.gif" ALT="" >');
$.post("likepost.php", { postid: postid } , function(data)
{
if(data.indexOf("Yes") >= 0)
{
//Question is about this part
}
else
{
//Question is about this part
}
});
});
现在,在“是”或其他部分:我该怎么做才能将$(this)
中的数据替换为replaceWith
?我以为我可以用classid
来做,但我不确定如何做到这一点。我想到了这个:
$(classid).replaceWith('Yes, yes indeed.');
$(classid).replaceWith('Nope.');
我将如何使这项工作?
答案 0 :(得分:2)
假设我已正确理解了这个问题并且你试图替换$.post
回调中的被点击元素,最简单的方法是在回调之外维护对该元素的引用。这样您就不必再次遍历DOM以重新选择一次已选择的元素:
var clicked = $(this);
$.post("likepost.php", { postid: postid } , function(data) {
if(data.indexOf("Yes") >= 0) {
clicked.replaceWith("Yes");
} else {
clicked.replaceWith("No");
}
});
您当前的尝试不起作用,因为classid
只是表示id
属性值的字符串。要从中创建jQuery对象,您需要将其附加到“#”以生成有效的选择器。
答案 1 :(得分:0)
不要使用ID来查找您刚才拥有的元素(例如$("#"+$(this).attr('id'))
),而是直接使用它:$(this)
。当this
reference从函数调用更改为函数调用(在ajax回调中它不同)时,您需要将其缓存在变量中。
$(".post-click").click(function() {
var loadImg = $('<img SRC="assets/img/refresh.gif" ALT="" >');
$(this).replaceWith(loadImg);
var toReplace = loadImg; // could be $(this) if you hadn't replaced it already
$.post("likepost.php", { postid: postid } , function(data) {
toReplace.replaceWith( data.indexOf("Yes") >= 0
? "success"
: "failed"
);
});
});