如何强制jQuery保持本地化?

时间:2012-02-07 10:58:55

标签: javascript jquery

我正在使用jQuery作为我的JavaScript'插件'中的依赖项。我正在将整个jQuery库构建到我的函数闭包中。不幸的是,这似乎并不是阻止 jQuery走向全球并接管window的明显方式。 noConflict一切都很好,但我不希望我的插件弄乱全局名称​​ jQuery ,以防插件的网站已经有不同的版本。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您可以使用jQuery.noConflict(true)取消整个jQuery。

(function($){
    //...
})(jQuery.noConflict(true));

答案 1 :(得分:3)

// For example I have jQuery 1.2.6 from Drupal 6
// but some jquery plugins don`t work with this old version

// we have 1.2.6 version here

 var yourStruct = new function(){

    if(typeof(window.jQuery) == "function"){
        var oldJQuery = window.jQuery 
    }

    // jQuery v1.7 
     (function(a,b){function cA(a){return .............. // jQuery code


    var jQuery = window.jQuery ; // create jQuery varible in local scope

    if(typeof(oldJQuery) == "function"){
        window.jQuery = oldJQuery; 
    }

    this.version = function() {
        // in this plase we always have 1.7 version of jQuery
        return jQuery.fn.jquery;

    }
}

// we have 1.2.6 version here

console.log(jQuery.fn.jquery); // 1.2.6 
console.log(yourStruct.version()); // 1.7

编辑你是对的jQuery.noConflict(true)做同样的事。我稍微改变了代码

 var yourStruct = new function(){

    // jQuery v1.7 
     (function(a,b){function cA(a){return f.isWindow(a) .........// jQuery code

    var jQuery = window.jQuery.noConflict(true); // create jQuery varible in local scope
    var $ = jQuery;

    this.version = function() {
        // in this plase we always have 1.7 version of jQuery
        return jQuery.fn.jquery;
    }
    this.someFunction = function() {
        // Write your code specific for 1.7 version here    
    }

}

console.log(jQuery.fn.jquery); // 1.2.6 
console.log(yourStruct.version()); // 1.7

答案 2 :(得分:0)

这是你想要做的:

<!DOCTYPE HTML>
<html>
    <body>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
    <script>
        console.log(jQuery.fn.jquery, 'first');
        console.log($.fn.jquery, 'first');
    </script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script>
        (function ($) {
            console.log($.fn.jquery, 'closure');
        })(jQuery.noConflict(true));
    </script>
    <script>
        console.log(jQuery.fn.jquery, 'last');
        console.log($.fn.jquery, 'last');
    </script>
    </body>
</html>

此代码的输出是

1.2.6 first 
1.2.6 first 
1.10.2 closure
1.2.6 last 
1.2.6 last