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

Javascript 如果选择器存在-运行代码,否则重复检查,javascript,jquery,Javascript,Jquery,我试图检查选择器是否存在,如果存在,我希望它运行一些代码,如果不存在,我希望它重复检查 我之所以想这样做,是因为我知道一个元素将存在,但我不知道什么时候 大概是这样的: if ($(.element).length ) { // Do something }else{ //check again }); 有什么想法吗 var interval = setInterval(function () { if ($(".youtube5player").length) {

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

我之所以想这样做,是因为我知道一个元素将存在,但我不知道什么时候

大概是这样的:

if ($(.element).length ) {
    // Do something
}else{
//check again
});
有什么想法吗

var interval = setInterval(function () {
    if ($(".youtube5player").length) {
        clearInterval(interval);
        // Do stuff
    }
}, 100);
它的作用是大约每100毫秒执行一次检查,以查看选择器是否返回任何结果。如果是,则清除间隔,代码将不再运行

示例:

除了使用,还可以使用递归setTimeout模式,如下所示:

(function doCheck(){
    setTimeout(function(){
        if ($(.element).length ) {
            // Do something
        }else{
            //check again
            doCheck();
        });
    }, 100);
})();
虽然在您的情况下似乎不太可能看到,但有时使用setInterval被认为是有害的。从:

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

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


与其他方法不同,递归方法也会慢慢在内存中建立一个巨大的调用堆栈。ECMAScript 6有尾部调用优化,但ECMAScript 4没有。