如果选择器存在 - 运行代码重复检查

时间:2011-08-21 05:43:32

标签: javascript jquery

我正在尝试检查选择器是否存在,如果它存在,我希望它运行一些代码,如果不是,我希望它重复检查。

我想这样做的原因是因为我知道一个元素会存在,但我不知道什么时候。

这样的事情:

if ($(.element).length ) {
    // Do something
}else{
//check again
});

有什么想法吗?

2 个答案:

答案 0 :(得分:11)

var interval = setInterval(function () {
    if ($(".youtube5player").length) {
        clearInterval(interval);
        // Do stuff
    }
}, 100);

这样做是使用setInterval大约每100毫秒执行一次检查,看看你的选择器是否返回任何结果。如果是,则清除间隔并且代码不会再次运行。

示例: http://jsfiddle.net/rBdFP/

答案 1 :(得分:4)

除了使用setInterval之外,您还可以使用递归的setTimeout模式,如下所示:

(function doCheck(){
    setTimeout(function(){
        if ($(.element).length ) {
            // Do something
        }else{
            //check again
            doCheck();
        });
    }, 100);
})();

虽然在您的情况下似乎不太可能看到使用setInterval被认为有害的时候。来自documentation

  

如果您的逻辑可能需要更长时间才能执行   比间隔时间,建议你递归调用一个   使用window.setTimeout命名函数。例如,如果使用   setInterval每隔5秒轮询一次远程服务器,网络延迟,   一个没有响应的服务器,以及许多其他问题可能会阻止   要求在分配时间内完成。因此,你可能会发现   你自己排队的XHR请求不一定会返回   顺序。

     

对于这种情况,首选递归setTimeout模式