0

所以我在 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.');

我将如何进行这项工作?

4

2 回答 2

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 对象,您需要将其附加到“#”以生成有效的选择器。

于 2012-10-23T09:24:49.640 回答
0

不要使用 ids 来查找您刚刚拥有的元素(如$("#"+$(this).attr('id'))),而是直接使用它:$(this). 随着this引用从函数调用更改为函数调用(在您的 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"
        );
    });
});
于 2012-10-23T09:28:52.753 回答