2012-09-14 100 views
0

我有一個Firefox插件,它在sub.example.com的每個頁面上注入/執行一個jQuery腳本。該腳本不適用於網站的一個頁面,因爲設計不好。如果某個元素位於頁面上,是否有任何方法可以阻止腳本執行?如果存在元素,我該如何阻止JavaScript執行?

編輯:我使用的腳本必須在DOM加載之前執行之前。有什麼方法可以訪問HTML文件本身,並找出該元素是否存在?

+0

你應該閱讀關於jquery'on' api,看看你是否可以在你的頁面中使用它.. – Baz1nga

+0

好吧,下面的答案都回答了這個問題,他們只是沒有解決我的問題。我設法通過指定一個URL異常來找到解決方法。 – Ian

回答

8

由於jQuery的藏品只是加強了陣列,他們每個人都有一個length屬性,它會告訴你它有多少個元素匹配:

jQuery(document).ready(function($) 
{ 
    if ($('#someElement').length) return; 
    // All of your code should go here... 
}); 
+0

爲了簡潔起見,我推薦'if($('#someElement')[0])',因爲該表達式要麼計算爲DOM引用或'undefined',這正是需要檢查的內容。 –

+2

@ŠimeVidas - 恕我直言,'.length'在它的功能上更加清晰:它檢查集合的長度。無論哪種方式都很好,但... –

0

由於您使用jQuery的,我想你的腳本包在$(document).ready回調,如果是這樣:

$(document).ready(function() { 
    if ($('#breakOnThisElem').length) { 
     return; 
    } 
}); 

如果你的代碼不裹在一個函數是這樣的:改變它! :)

+0

請解釋downvote。只要他們解釋原因,我不介意低級選民。我可能會學到一些東西或2 –

+0

OP明確指出,如果存在這個元素,我們不會運行他們的代碼(儘管我並不是downvoter)。 –

+0

不是我的DV,而是'.ready()'對單個元素沒有用處。它會工作,但是當DOM準備就緒時就會運行,就像典型的準備好的調用一樣。換句話說,'.ready()'忽略選擇器。 –

相關問題