不断检查元素的长度并执行操作(如果为1)

时间:2015-06-14 15:31:25

标签: javascript jquery events javascript-events google-chrome-extension

我在页面上有一个我不断监视的元素。如果在任何时候该长度等于1,则表示它存在于页面上(用户已注销),我想用弹出窗口提示他们登录。

所以目前我有这个:

function loginNotice() {
    //do prompt
}
keepAlive();

function keepAlive() {
    if($('.username_field').length == 1){
        loginUser();
    }
    try {
        setTimeout(function(){keepAlive();}, 10000);
    } catch (ex){
    }
}

我不认为这是非常有效的。因为它经常检查并在需要时运行提示。事情是页面可能加载,长度可能已经是1,或者它可能是0.我不知道在任何给定时间它将是什么,所以我不能做一个改变。< / p>

有没有办法可以更有效地做到这一点?

1 个答案:

答案 0 :(得分:4)

您可以在父/祖先节点上使用mutation observer,并观察对subtree和/或childList的更改。

var ancestor = $("...closest ancestor that doesn't change..."); // Worst case, $('body')
var ob = new MutationObserver(function() {
    if($('.username_field').length == 1){
        loginUser();
    }
});
ob.observe(ancestor[0], {
    subtree: true,   // You probably only need...
    childList: true  // ...one of these or the other
});

尽管如此,每10秒做一次DOM查询根本不是问题;如果你不需要比这更快的反应,你目前的解决方案是好的。