1

Google Chrome のコンソールから実行され、ページを分析する jquery スクリプトを作成しようとしています。私の問題は、次のコードを実行するときです。

var jq = document.createElement('script');
jq.src = "http://code.jquery.com/jquery-latest.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
alert($('a'));

null (悪い結果) のメッセージ ボックスが表示されますが、それを次のように実行に分けると:

ステップ1:

var jq = document.createElement('script');
jq.src = "http://code.jquery.com/jquery-latest.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);

ステップ2:

alert($('a'));

それはうまく機能し、私の望む結果である[オブジェクト]を取得します。

問題は、これを単一のバッチで実行するにはどうすればよいですか?

4

3 に答える 3

2

一般に、script nodes onloadイベントにリスナーをアタッチする必要があります。jQuery は、完全に転送および実行されるまで使用できません。お気に入り

var jq   = document.createElement('script'),
    head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;

    jq.src = "http://code.jquery.com/jquery-latest.min.js";
    jq.onload = jq.onreadystatechange = function() {
    if(!jq.readyState || /loaded|complete/.test( jq.readyState ) ) {
        jq.onload = jq.onreadystatechange = null;
        jq = undefined;
    }
}

head.insertBefore(jq, head.firstChild);

上記のコードはかなり堅実で、IE6+ でも動作します。

于 2012-07-24T20:00:12.813 に答える
0

スクリプトを完全にロードするための確実な方法とテスト済みのリスナーが必要な場合は、http: //yepnopejs.com/のようなサードパーティのライブラリを試してください。

スクリプト ローダーをゼロから開始することはお勧めしません。今日はお勧めしません。

于 2012-07-24T20:03:46.597 に答える
0

次のようなことを試してスクリプトの準備状態を確認できます。

jq.onreadystatechange = function() {
  if (this.readyState == 'complete') {
     alert($('a'));
  }
}
于 2012-07-24T20:00:55.747 に答える