正在处理需要jQuery的脚本。它将被加载到一个网站上,该网站可能已加载或未加载jQuery。有没有什么方法可以让我的jQuery版本加载到全局命名空间之外,以便在我的匿名函数之外无法访问它?
答案 0 :(得分:6)
没有必要,只需正确使用noConflict。这是它的预期目的。
<script src="jquery.js"></script>
<script src="someplugin.js"></script>
<script>
(function($){
$.doSomething();
})($.noConflict(true));
</script>
虽然取决于具体情况,但通常要求客户端在包含代码之前包含jquery通常会更好。 (Polaris878在对你的问题的评论中暗示了这一点)
答案 1 :(得分:1)
首先,您应该检查jQuery是否已经加载。如果它被加载,你只需使用它,否则加载jQuery并使用它。一个简单的JavaScript可以使它成为可能
myjQ = null;
if (typeof window.jQuery == 'undefined') {
load_script('http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js', callback_fn );
} else {
callback_fn();
}
load_script = function(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function () {
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
};
callback_fn = function(){
myjQ = jQuery.noConflict();
// you can use myjQ just like $ here.
}
可能是您可以将所有这些函数包装在一个对象中,这样它们就不会污染全局命名空间。