我正在尝试解决不将timeago函数重复到已经存在的元素的问题,而是将其添加到没有它的元素中。我正在尝试这个,但新添加的abbrs没有被激活
<abbr title="2011-09-15T12:46:26" class="timeago">less than a minute ago</abbr>
function activate_timeago(){
setInterval(function(){
$('.timeago').each(function(){
if ($(this).data('active')!='yes'){
$(this).timeago();
$(this).data('active','yes');
}
});
},60000);
}
任何想法?
答案 0 :(得分:2)
我不会像你正在尝试的那样激活它们,而是在创建新项目时立即激活它们,只需调用类似这样的函数
function activate_timeago(el){
$(el).each(function(){
if (!$(this).hasClass('processed')){
$(this).timeago();
$(this).addClass('processed');
}
});
}
在获取新项目的ajax回调完成后,只需调用:
var elements = $('#container .new');
activate_timeago(elements);
修改强>
只是没有混淆,$('#container .new')
选择器不是默认的jQuery,new
是一个css类,就像任何其他类一样,你可以在你的元素中添加类new
ajaxcall,或者你可以用另一种方式选择它们,因为你可能刚刚将它们添加到ajax回调中的DOM中,你已经可以在数组中使用它们了...
结束编辑
但是, 如果你真的想继续在间隔部分使用这个:
function activate_timeago(){
setInterval(function(){
$('.timeago:not(.processed)').each(function(){
$(this).timeago();
$(this).addClass('processed');
}
});
},60000);
}
这个函数你只在页面加载时调用一次, 选项二的缺点是,他们不会立即进入时间表,而是在下一次间隔到达之后。
答案 1 :(得分:0)
好的,这似乎有用
function activate_timeago(){
$('.timeago').each(function(){
var $this = $(this);
if ($this.data('active')!='yes'){
$this.timeago().data('active','yes');
}
});
setTimeout(activate_timeago, 60000);
}
感谢#jquery
上的eddiemonge