2

jQuery を必要とするスクリプトに取り組んでいます。jQuery がロードされているかどうかに関係なく、Web サイトにロードされます。自分のバージョンの 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 に答える