将jQuery保留在全局命名空间之外

时间:2013-06-06 19:33:45

标签: jquery

正在处理需要jQuery的脚本。它将被加载到一个网站上,该网站可能已加载或未加载jQuery。有没有什么方法可以让我的jQuery版本加载到全局命名空间之外,以便在我的匿名函数之外无法访问它?

2 个答案:

答案 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. 
}

可能是您可以将所有这些函数包装在一个对象中,这样它们就不会污染全局命名空间。