簡體   English   中英

jQuery插件檢查版本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM