我正在尝试检查选择器是否存在,如果它存在,我希望它运行一些代码,如果不是,我希望它重复检查。
我想这样做的原因是因为我知道一个元素会存在,但我不知道什么时候。
这样的事情:
if ($(.element).length ) {
// Do something
}else{
//check again
});
有什么想法吗?
答案 0 :(得分:11)
var interval = setInterval(function () {
if ($(".youtube5player").length) {
clearInterval(interval);
// Do stuff
}
}, 100);
这样做是使用setInterval
大约每100毫秒执行一次检查,看看你的选择器是否返回任何结果。如果是,则清除间隔并且代码不会再次运行。
答案 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模式