2012-10-04 40 views
2

根據jquery運行的版本運行函數的最佳方式是什麼? 現在我有:if語句依賴於jQuery()。jquery

var jqVersion = jQuery().jquery; 

if (jqVersion == '1.4.2') { 

    //jQuery 1.4.2 specific script here. 

} else { 

    //jQuery that works on rest of the site here 

} 

能正常工作在Firefox,但在Chrome和IE的頁面給出了一個錯誤在else塊中的代碼,即使滿足條件和else是不必要的。乾杯。

+0

什麼是錯誤? – Musa

+0

'未捕獲的類型錯誤:對象#沒有方法'prop'' .prop方法僅在'else'塊中使用。 – acowley

+0

@acowley:那你的實際問題是什麼? – zerkms

回答

3

如果您的錯誤與.prop()相關聯,那是在jQuery 1.6版本中添加的,那麼您應該檢查該方法是否可用並採取相應措施。

if (jQuery().prop) { 
    // .prop() methods exists 
} 

甚至只是:

if (jQuery.fn.prop) { 
    // .prop() methods exists 
} 

僅供參考,你可以看到的是什麼版本加入here任何給定的jQuery功能。


我的建議是檢查你想要的具體方法是否如上所述。但是,如果你覺得你必須檢查版本,那麼你需要檢查大於,而不是平等。如您所知,jQuery().jQuery包含版本作爲字符串。如果你想檢查一個大於某個數字的版本,那麼你需要將該字符串解析爲數字並與它們進行比較。這裏有一個函數來做到這一點:

jQuery.getVersionObject = function() { 
    var versionStr = jQuery().jQuery; 
    var matches = versionStr.match(/(\d+)\.(\d+)\.(\d+)/); 
    var num = (matches[1] * 1000 * 1000) + (matches[2] * 1000) + (matches[3]); 
    return ({major: matches[1], minor: matches[2], rev: matches[3]; num: num}) 
} 

jQuery.checkMinVersion(major, minor, rev) { 
    minor = minor || 0; 
    rev = rev || 0; 
    var num = (major * 1000 * 1000) + (minor * 1000) + rev; 
    var version = jQuery.getVersionObject(); 
    return(version.num >= num); 
} 

用法示例:

if (jQuery.checkMinVersion(1, 6, 0)) { 
    // jQuery version is 1.6.0 or higher 
} 
+0

+1我同意你的大部分答案......爲什麼要經歷所有這些麻煩的解析?版本以字符串形式存儲,因爲它*是*。例如,簡單的文本比較'version>「1.4.2」'就可以。 – nbrooks

+0

@nbrooks - 數字的文本比較僅適用於兩個字符串在每個插槽中的數字位數都不相同的版本字符串。功能測試更好。 – jfriend00

+0

就像我說的,我同意功能測試更好,但是您也提供了檢查版本的代碼。我不確定jQuery會不會在版本中返回三位數字,但無論如何,這不會導致比較失敗,因爲最重要的挖掘是在右側,任何遺漏都會從左側開始。 。雖然沒有一個重點,並且我發現如果您不確定添加哪個子版本功能或其他問題,可能會出現問題。 – nbrooks

1

不要寫代碼依賴於jQuery的版本。

大部分的代碼應該是相同的,對於某些特殊的部分,測試屬性是否存在而不是使用jQuery的版本。

例子:

if ('prop' in $jQueryObject) { 
    // do something 
} else { 
    // do in other way 
} 

對於同一頁面使用不同版本的jQuery,檢查我的這個問題的答案。

script reference causes conflict

+0

這使我們在if語句中的兩個腳本仍然是問題。我將它們移動到單獨的文件中,用.getScript調用它們 – acowley