选择元素并替换each()中的文本

Selecting element and replacing text inside each()

本文关键字:文本 each 元素 替换 选择      更新时间:2023-09-26

我有一个列表,看起来像这样:

<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秒。

所以我的想法是,选择每个li ->获得唯一id->保存id到一个变量->到一个$。获取请求以请求给定id的点击->用新的点击替换当前的点击。

问题是我似乎不能正确地选择。点击…这是我的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值的任何想法?

非常感谢您的帮助

尝试:

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);

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

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

你可以这样做:

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);

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

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);