2

が呼び出されたcontent.htmlときにファイルを追加する単純なクラスがあります。MyClass.display()

class MyClass
    @display: (display) ->
      $.get 'content.html', (data) ->
        $('body').append data

上記のコードは、常にデータを末尾に追加しますbody

HTMLコードはこれだけです

<html>
  <head></head>
  <body>
    <p>text before</p>
    <script src="file.js" type="text/javascript"></script>
    <script type="text/javascript">
      MyClass.display();
    </script>
    <p>text after</p>
  </body>
</html>

</script>関数をトリガーした囲みタグの直後にデータを追加する方法を知りたいです。それは</script>と 次の<p>タグの間にあります。

要件の 1 つは、HTML マークアップを変更してはならないということです。以下の回答のいずれかで提案されているように、ID をマークアップに直接追加することはできません。

Google AdSense コードで確認できるので、これが可能であることはわかっています。しかし、彼らの JavaScript コードは暗号化されているように見えるので、その方法を解読することはできません。

これを達成する方法はありますか?

4

2 に答える 2

1

JavaScript コードが実行されている間、それを含むスクリプト タグは、DOM オブジェクトで使用可能な最後の要素です。

たとえば、次のように参照を取得できます。

var ele = $('script:last');

そこから、コンテンツに応じて、script タグのcontent.htmlにコンテンツを配置するために必要な作業を行うことができます(script タグ内に追加しないでください。探しているものではありません)。

たとえばcontent.html、独自の最上位要素がある場合、p

<p>
  <strong>hello</strong> world!
</p>

その後、簡単にできます

var MyClass = {
  display: function() {
    var ele = $('script:last');
    $.get('content.html', function(data) {
      ele.after(data);
    });
  }
}

注 1:eleコールバックの外で参照を取得する必要があり$.getます。コールバックは非同期で実行されます。それまでに、DOM はより多くの要素をロードしscript:last、スクリプト タグではなくなっている可能性があります。

注 2:全体をラップする最上位要素が含まれていない場合content.htmlは、コールバックで自分でラップする必要があります。ele.after("<div class='my-own-wrapper'>" + data + "</div>");

参考:https ://gist.github.com/4122339

于 2012-11-21T00:40:34.183 に答える
-1

私はあなたがやろうとしていることを見ます。マークアップの特定の領域内に HTML を挿入したい。

次のようなことをお勧めします。

class MyClass
    @display: (display) ->
      $.get 'content.html', (data) ->
        document.write data

<html>
  <head></head>
  <body>
    <p>text before</p>
    <script src="file.js" type="text/javascript"></script>
    <script type="text/javascript">
      MyClass.display();
    </script>
    <p>text after</p>

  </body>
</html>

マークアップが読み込まれるように、ページの下部にスクリプトを配置することが重要です。そうしないと、ページの読み込みが完了する前にスクリプトが実行される可能性があります。

于 2012-11-20T07:09:04.083 に答える