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