我有一个如下所示的列表:
<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值的任何想法?
非常感谢帮助:)
答案 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);