仅在新添加的元素上激活timeago

时间:2011-09-15 19:08:40

标签: jquery timeago

我正在尝试解决不将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);
    }

任何想法?

2 个答案:

答案 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