2010-11-25 64 views
2

每当点击一个投票按钮时,我正在加载一个ajax-loader gif。但图像显示所有项目。我正试图找出如何为投票的项目加载图片。这是我的代码。jquery为单个元素添加html()

$(document).ready(function(){ 
    $(".vote").click(function(e) { 
     $('.ajax_load').html('<img src="/images/ajax-loader.gif" />'); 
     var item_id = $(this).attr("id"); 
     var dataString = 'item_id=' + item_id; 

    $.ajax({ 
     type: "POST", 
     url: "vote.php", 
     data: dataString, 
     cache: false, 
     success: function(html) { 
    $('.ajax_load').html('Voted!'); 
     } 
    }); 
    return false; 
}); 
}); 

HTML样品

<div class="vote" id=88">Vote</div> <div class="ajax_load"> 
<div class="vote" id=92">Vote</div> <div class="ajax_load"> 
<div class="vote" id=38">Vote</div> <div class="ajax_load"> 
+0

是否有很多类`ajax_load`?如果是这样,我们将需要看到一些HTML(*结构*),所以我们可以看到如何过滤到特定的项目..(*还,为什么你使用投票标签选择器?似乎无效*) – 2010-11-25 21:02:48

+0

你能提供一个HTML的样本,所以我们可以确定你使用的是什么html。 – 2010-11-25 21:03:28

+0

很抱歉!添加 – Rambo 2010-11-25 21:15:54

回答

2

从HTML样品,它看起来像元素是同级的,所以你应该使用

$(this).nextAll('.ajax_load:first').html('<img src="/images/ajax-loader.gif" />'); 

显示图像。

在成功回调

使用

$('#' + item_id).nextAll('.ajax_load:first').html('Voted!'); 

为目标的具体表决元素。

0

尝试

$("vote").click(function(e) { 
    $(this).html(...); 
0

假设.ajax_load是投一个孩子,那么你可以改变这一点:

$('.ajax_load').html('<img src="/images/ajax-loader.gif" />'); 

到:

$(this).find('.ajax_load').html('<img src="/images/ajax-loader.gif" />'); 

这只会影响.ajax_load这是被点击的投票的孩子,而不是所有的人。

在你的ajax调用中也是如此。我认为$(this)仍然应该指的是点击“投票”。

$('.ajax_load').html('Voted!'); 

变为...

$(this).find('.ajax_load').html('Voted!'); 

编辑好了,因为HTML,有几个方法可以做到这一点。我可能会做这种方式:

$(this).next('.ajax_load:first')... <- do whatever you'll do with the selection. 

一般来说,如果你想弄清楚如何使用jQuery选择一个div,一个伟大的地方看是traversingselecting jQuery的文档。