我在页面上有一个我不断监视的元素。如果在任何时候该长度等于1,则表示它存在于页面上(用户已注销),我想用弹出窗口提示他们登录。
所以目前我有这个:
function loginNotice() {
//do prompt
}
keepAlive();
function keepAlive() {
if($('.username_field').length == 1){
loginUser();
}
try {
setTimeout(function(){keepAlive();}, 10000);
} catch (ex){
}
}
我不认为这是非常有效的。因为它经常检查并在需要时运行提示。事情是页面可能加载,长度可能已经是1,或者它可能是0.我不知道在任何给定时间它将是什么,所以我不能做一个改变。< / p>
有没有办法可以更有效地做到这一点?
答案 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查询根本不是问题;如果你不需要比这更快的反应,你目前的解决方案是好的。