[英]jQuery Plugin Check Version
在編寫新的jQuery插件時,有一種直接的方法來檢查當前版本的jQuery是否高於某個數字? 否則顯示警告或記錄錯誤。
做一些像這樣的事情會很好:
jQuery.version >= 1.2.6
以某種形式。
這是我用來確保用戶至少使用v.1.3.2的jQuery的檢查。
if (/1\.(0|1|2|3)\.(0|1)/.test($.fn.jquery)
|| /^1.1/.test($.fn.jquery)
|| /^1.2/.test($.fn.jquery))
{
//Tell user they need to upgrade.
}
試試這個:
>>> jQuery.fn.jquery;
"1.3.2"
我覺得所有的解決方案都相當笨重,我的下面缺少一些東西?
壓縮版本:
(parseInt(jQuery.fn.jquery.split('.').join('')) > 140) ? alert("Running jquery greater than 1.4.0") : alert("current jquery version is 1.4.0 or less");
長版清晰度:
// get version as a string and get rid of the periods.
version = jQuery.fn.jquery.split('.').join('');
// Make into one long number for easy comparison. Example, 171, or 141.
version = parseInt(version);
if(version > 141){
alert("We're using a version greater than 1.4.1");
}else{
alert("jQuery version is 1.4.1 or lower");
}
請參閱我的答案: jQuery版本兼容性檢測
$().jquery;
要么
jQuery.fn.jquery;
將版本作為整數數組傳遞,如jQmin([1,4,2])
以檢查當前版本是否等於或高於v1.4.2。
function jQmin(min) {
var i, cur,
cver = $.fn.jquery,
c = cver.split(".");
while (min.length < c.length) min.push(0);
for (i = 0; i < min.length; i++) {
cur = parseInt(c[i]);
if (cur > min[i]) return true;
if (cur < min[i]) return false;
}
return (cver === min.join("."));
}
關於什么:
function minVersion(version) {
var $vrs = window.jQuery.fn.jquery.split('.'),
min = version.split('.'),
prevs=[];
for (var i=0, len=$vrs.length; i<len; i++) {
console.log($vrs[i], min[i], prevs[i-1]);
if (min[i] && $vrs[i] < min[i]) {
if (!prevs[i-1] || prevs[i-1] == 0)
return false;
} else {
if ($vrs[i] > min[i])
prevs[i] = 1;
else
prevs[i] = 0;
}
}
return true;
}
我寫了一篇關於我的分叉要旨代碼: https://gist.github.com/budiadiono/7954617 ,上寫dshaw原代碼: https://gist.github.com/dshaw/652870 。
如果它足以檢查次要版本,而不是補丁版本,你可以做類似的事情
parseFloat(jQuery.fn.jquery) >= 1.9
可以稍微改變一下來檢查> = 1.4.3: parseFloat(jQuery.fn.jquery) > 1.4 || parseFloat(jQuery.fn.jQuery) == 1.4 && parseFloat(jQuery.fn.jQuery.slice(2)) >= 4.3
parseFloat(jQuery.fn.jquery) > 1.4 || parseFloat(jQuery.fn.jQuery) == 1.4 && parseFloat(jQuery.fn.jQuery.slice(2)) >= 4.3
因為沒有jquery版本,我們超過一位數,你可以安全地使用
if ([$.fn.jquery,"1.6"].sort()[0] == "1.6")
{
// jquery version greater or same as 1.6
}
else
{
// jquery version lower than 1.6
}
在jquery.1.3.2源代碼中找到了這個:
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
.....
// The current version of jQuery being used
jquery: "1.3.2",
我沒有檢查,但像“$ .fn.jQuery”這樣的東西可能會起作用。
唯一正確的答案是使用版本比較功能。
這里的很多答案都做出了很糟糕的假設,即使是一點點批判性思維也可能表明不正確,比如假設每個子版本都是一位數,或者jQuery永遠不會達到版本2.我不想重新哈希他們在這個答案中,但那些時期有意義:它意味着“我左邊的任何東西都是一個比我右邊更重要的數字。”因此,正確的解決方案總是檢查最左邊的版本號組件,並且只檢查下一個如果第一對完全匹配,則組件,依此類推。
jQuery的版本號在$.fn.jquery
可用, $.fn.jquery
許多其他答案中所述。 它是一個字符串,您的版本比較函數應該是字符串。
這是PHP的JS版本比較函數的一個端口 。 注意它對於jQuery來說可能有些過分,特別是如果你假設你只會看到數字並且不會處理候選版本等。 但它將是可靠的,面向未來的。
而不是像我在上面的一個答案中看到的那樣使用parseInt
,我建議使用如下所述的parseFloat
var _jQueryVer = parseFloat('.'+$().jquery.replace(/\./g, ''));
/* Here the value of _jQueryVer would be 0.1012 if the jQuery version is 1.0.12
which in case of parseInt would be 1012 which is higher than
140 (if jQuery version is 1.4.0)
*/
if(_jQueryVer < 0.130) {
alert('Please upgrade jQuery to version 1.3.0 or higher');
}
那樣的東西?
它檢查是否加載了jQuery,如果是,則檢查版本。 此方法也適用於2位數版本號(1.10.28),如果需要,您可以將其擴展為3位數,如果您將100個數字替換為1000 ...
function checkJQueryMinVersion(need) {
var v1 = need.split('.');
var v1_num = 0;
var v2 = jQuery.fn.jquery.split('.');
var v2_num = 0;
if(v1[0] != undefined) {
v1_num += 100*100*parseInt(v1[0]);
}
if(v1[1] != undefined) {
v1_num += 100*parseInt(v1[1]);
}
if(v1[2] != undefined) {
v1_num += parseInt(v1[2]);
}
if(v2[0] != undefined) {
v2_num += 100*100*parseInt(v2[0]);
}
if(v2[1] != undefined) {
v2_num += 100*parseInt(v2[1]);
}
if(v2[2] != undefined) {
v2_num += parseInt(v2[2]);
}
return (v1_num <= v2_num);
}
if(!window.jQuery || !checkJQueryMinVersion('1.10.28')) {
alert('Loading //ajax.googleapis.com/ajax/libs/jquery/1.10.28/jquery.min.js');
var script = document.createElement('script');script.type = 'text/javascript';
script.src = '//ajax.googleapis.com/ajax/libs/jquery/1.10.28/jquery.min.js';
document.getElementsByTagName('head')[0].appendChild(script);
}
else {
alert('Jquery version OK');
}
我很驚訝沒有人給出這個解決方案:
//Returns < 0 if version1 is less than version2; > 0 if version1 is greater than version2, and 0 if they are equal.
var compareVersions = function (version1, version2){
if(version1 == version2)return 0;
var version1Parts = version1.split('.');
var numVersion1Parts = version1Parts.length;
var version2Parts = version2.split('.');
var numVersion2Parts = version2Parts.length;
for(var i = 0; i < numVersion1Parts && i < numVersion2Parts; i++){
var version1Part = parseInt(version1Parts[i], 10);
var version2Part = parseInt(version2Parts[i], 10);
if(version1Part > version2Part){
return 1;
}
else if(version1Part < version2Part){
return -1;
}
}
return numVersion1Parts < numVersion2Parts ? -1 : 1;
}
將jQuery版本字符串拆分為數字以測試其值。 某些版本字符串不包含增量,因此將它們設為0。
var
version = $.fn.jquery.split('.'),
versionMinor = parseFloat(version[1]),
versionIncrement = parseFloat(version[2] || '0');
if (versionMinor === 4 && versionIncrement < 3 || versionMinor < 4) {
$.error('Requires jQuery 1.4.3 or higher to support ...');
}
使用jQuery錯誤函數來防止執行時向開發人員解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.