2

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

4

2 回答 2

6

没必要,正确使用noConflict即可。这就是它的预期目的。

<script src="jquery.js"></script>
<script src="someplugin.js"></script>
<script>
    (function($){
        $.doSomething();
    })($.noConflict(true));
</script>

虽然视情况而定,但通常最好只要求客户端在包含您的代码之前包含 jquery。(Polaris878 在对您的问题的评论中暗示了这一点)

于 2013-06-06T19:37:47.503 回答
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. 
}

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

于 2013-06-06T19:43:57.820 回答