选择元素并替换每个()内的文本

时间:2011-08-06 10:26:44

标签: javascript jquery

我有一个如下所示的列表:

<ul id="offers">

<li class="unique-id-here">
<span class="country">US</span>
<span class="clicks">192</span>
<span class="ctr">9%</span>
</li>

</ul>

我正在尝试每5秒使用新值更新.clicks。

所以我的确是,选择每个li - &gt;获取unique-id-here - &gt;将id保存到变量 - &gt;到$ .get请求请求给定ID的点击次数 - &gt;用新的替换当前点击次数。

问题是我似乎无法正确选择.clicks ...这就是我的jQuery代码:

var refreshId = setInterval(function() {

$("#offers li").each(function(){

    var a = $(this).attr('class');      
    if(a) {

            $.get("ajax.php", { opt: "stats", oid: a }, function(r) {
                var j = eval('(' + r + ')');

                $(this).find('.clicks').text('<strong>'+j.message.clicks+'%</strong>');

            });
    }
});
}, 5000);

关于如何正确替换每个li字段的.clicks值的任何想法?

非常感谢帮助:)

2 个答案:

答案 0 :(得分:3)

尝试:

var refreshId = setInterval(function() {

$("#offers li").each(function(){
    var $li = $(this), 
        a = $li.attr('class');      
    if(a) {
            $.get("ajax.php", { opt: "stats", oid: a }, function(r) {
                var j = eval('(' + r + ')');
                $li.find('.clicks').html('<strong>'+j.message.clicks+'%</strong>');
            });
    }
});
}, 5000);

您在$(this)内使用$.get,这将引用另一个对象。另外,你为什么要使用eval?为什么不将JSON对象返回给请求?

此外,您使用的是text(),但传递给参数的字符串包含HTML(<strong>)。因此,我使用text()切换html()

答案 1 :(得分:0)

你可以这样做:

var refreshId = setInterval(function() {

    $("#offers li").each(function(){
        var clicks = $(this).find('.clicks');
        var a = $(this).attr('class');      
        if(a) {

                $.get("ajax.php", { opt: "stats", oid: a }, function(r) {
                    var j = eval('(' + r + ')');

                    clicks.text('<strong>'+j.message.clicks+'%</strong>');

                });
        }
    });
    }, 5000);

我认为你的问题是,$ AJAX调用的成功函数中的$(this)没有你想到的范围。你可以做的另一件事是:

var refreshId = setInterval(function() {

    $("#offers li").each(function(){
        var $that = $(this);
        var a = $(this).attr('class');      
        if(a) {

                $.get("ajax.php", { opt: "stats", oid: a }, function(r) {
                    var j = eval('(' + r + ')');

                    $that.find('.clicks').text('<strong>'+j.message.clicks+'%</strong>');

                });
        }
    });
    }, 5000);