2011-08-21 52 views
4

我想檢查選擇器是否存在,如果它是我想要它運行一些代碼,如果它不是我想重複檢查。如果選擇器存在 - 運行代碼其他重複檢查

我想這樣做的原因是因爲我知道一個元素將存在,但我不知道什麼時候。

事情是這樣的:

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

任何想法?

回答

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

這樣做是使用setInterval執行檢查大約每100毫秒,看看你的選擇返回任何結果。如果是,則間隔被清除並且代碼不會再次運行。

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

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圖案優選

+0

遞歸方法也將慢慢在不同於其他方法存儲器建立龐大的調用堆棧。 ECMAScript 6有Tail Call優化,但ECMAScript 4沒有。 – Mir

相關問題