jQuery version compatibility detection

前端 未结 6 690
刺人心
刺人心 2020-12-09 13:38

Are there any resources that can test a jQuery script/extension/plugin/whatever for version compatibility issues?

6条回答
  •  有刺的猬
    2020-12-09 14:10

    Just wrote a small jQuery plugin to help with version compatibility issues... feel free to improve upon it.

    (function($) {
        /**
         * Used for version test cases.
         * 
         * @param {string} left A string containing the version that will become
         *        the left hand operand.
         * @param {string} oper The comparison operator to test against. By
         *        default, the "==" operator will be used.
         * @param {string} right A string containing the version that will
         *        become the right hand operand. By default, the current jQuery
         *        version will be used.
         *        
         * @return {boolean} Returns the evaluation of the expression, either
         *         true or false.
         */
        $.isVersion = function(left, oper, right) {
            if (left) {
                var pre = /pre/i,
                    replace = /[^\d]+/g,
                    oper = oper || "==",
                    right = right || $().jquery,
                    l = left.replace(replace, ''),
                    r = right.replace(replace, ''),
                    l_len = l.length, r_len = r.length,
                    l_pre = pre.test(left), r_pre = pre.test(right);
    
                l = (r_len > l_len ? parseInt(l) * ((r_len - l_len) * 10) : parseInt(l));
                r = (l_len > r_len ? parseInt(r) * ((l_len - r_len) * 10) : parseInt(r));
    
                switch(oper) {
                    case "==": {
                        return (true === (l == r && (l_pre == r_pre)));
                    }
                    case ">=": {
                        return (true === (l >= r && (!l_pre || l_pre == r_pre)));
                    }
                    case "<=": {
                        return (true === (l <= r && (!r_pre || r_pre == l_pre)));
                    }
                    case ">": {
                        return (true === (l > r || (l == r && r_pre)));
                    }
                    case "<": {
                        return (true === (l < r || (l == r && l_pre)));
                    }
                }
            }
    
            return false;
        }
    })(jQuery);
    

    Can be used like so:

    $.isVersion("1.4.2"); // returns true, if $().jquery == "1.4.2"
    $.isVersion("1.3.2", ">"); // returns true if $().jquery > "1.3.2"
    $.isVersion("1.3", ">", "1.2.6"); // returns true
    $.isVersion("1.3.2", "<", "1.3.1"); // returns false
    $.isVersion("1.4.0", ">=", "1.3.2"); // returns true
    $.isVersion("1.4.1", "<=", "1.4.1"); // returns true
    

    Also supports pre-releases (releases are weighed heavier than pre-releases, so that 1.4.0pre < 1.4.0):

    $.isVersion("1.4.2", "<=", "1.4.2pre"); // returns false
    

提交回复
热议问题