jQuery插件检查版本

在编写新的jQuery插件时,是否有直接的方法来检查当前版本的jQuery是否高于某个数字? 否则显示警告或记录错误。

做一些像这样的事情会很好:

jQuery.version >= 1.2.6 

以某种forms。

这是我用来确保用户至少使用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" 

请参阅我的答案: jQuery版本兼容性检测

我觉得所有的解决方案都相当笨重,我的下面缺少一些东西?

压缩版:

 (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.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 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.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版本字符串拆分为数字以测试其值。 某些版本字符串不包含增量,因此将它们设为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错误函数来防止执行时向开发人员解释。

因为没有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 } 

唯一正确的答案是使用版本比较function。

这里的很多答案都做出了非常糟糕的假设,即使是一点点批判性思维也可能表明不正确,比如假设每个子版本都是一位数,或者jQuery永远不会达到版本2.我不想重新哈希他们在这个答案中,但那些时期有意义:它意味着“我左边的任何东西都是一个比我右边更重要的数字。”因此,正确的解决方案总是检查最左边的版本号组件,并且检查下一个如果第一对完全匹配,则组件,依此类推。

jQuery的版本号$.fn.jquery可用, $.fn.jquery许多其他答案中所述。 它是一个字符串,您的版本比较函数应该是字符串。

这是PHP的JS版本比较函数的一个端口 。 注意它对于jQuery来说可能有些过分,特别是如果你假设你只会看到数字并且不会处理候选版本等。 但它将是可靠的,面向未来的。

那样的东西?

它检查是否加载了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; } 

而不是像我在上面的一个答案中看到的那样使用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'); }