jQuery插件检查版本

时间:2009-07-02 09:33:14

标签: javascript jquery

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

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

jQuery.version >= 1.2.6

以某种形式。

15 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:10)

试试这个:

>>> jQuery.fn.jquery;
"1.3.2"

答案 2 :(得分:3)

请在此处查看我的回答:jQuery Version Compatibility Detection

答案 3 :(得分:3)

我觉得所有的解决方案都相当笨重,我的下方遗失了什么?

压缩版:

(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");
}

答案 4 :(得分:2)

$().jquery;

jQuery.fn.jquery;

答案 5 :(得分:1)

将版本作为整数数组传递,例如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("."));
}

答案 6 :(得分:1)

怎么样:

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

答案 7 :(得分:1)

如果它足以检查次要版本,而不是补丁版本,您可以执行类似

的操作

parseFloat(jQuery.fn.jquery) >= 1.9

可以稍微更改一下以检查&gt; = 1.4.3: parseFloat(jQuery.fn.jquery) > 1.4 || parseFloat(jQuery.fn.jQuery) == 1.4 && parseFloat(jQuery.fn.jQuery.slice(2)) >= 4.3

答案 8 :(得分:0)

在jquery.1.3.2 source:

中找到了这个
 jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {
    .....
    // The current version of jQuery being used
    jquery: "1.3.2",

我没有检查,但是“$ .fn.jQuery”之类的东西可能有效。

答案 9 :(得分:0)

将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错误函数来防止执行时向开发人员解释。

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

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

Here is a port of PHP’s version comparison function to JS。注意它对于jQuery来说可能有些过分,特别是如果你假设你只会看到数字并且不会处理候选版本等。但它将是可靠且面向未来的。

答案 12 :(得分:0)

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

答案 13 :(得分:0)

那样的东西?

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

答案 14 :(得分:0)

我很惊讶没人提供这个解决方案:

//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;
}