JavaScript attr('id')和这个

时间:2012-10-23 09:21:57

标签: javascript jquery

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

我将如何使这项工作?

2 个答案:

答案 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"
        );
    });
});