2012-04-20 11 views
3

jQueryでは、$ .ajax関数を使用して、指定されたURLからページのHTMLを読み込むことができます。 しかし、表示する前にそのページにhtmlaとすべてのリソースをロードすることに興味があります。それをどうやってやりますか?jQueryでページHTMLやコンテンツ(画像など)を読み込む方法は?

例: は私がこのページにイメージを持っている

<h1>About BigImage</h1> 
<img src="/images/reallybigimage.jpg" /> 

お知らせabout.htmlと呼ばれるファイルに次のHTMLを持っていると言います。 jQueryのajax関数を使用すると、HTMLが読み込まれるとすぐに「成功」​​しますが、画像はロードされません。

これはキッカーです:私はページ内にどれくらいのイメージがあるのか​​分かりません。読み込みたいイメージだけではありません。すべてのページのリソースです。 。 これを行う方法はありますか?

ありがとうございます!

答えて

1

相対パスが問題でない場合は、お使いのsuccess機能で、あなたはその後、すべてのリンクを見つけて、このようにそれらをロードしようとすることができます

//.... 
success:function(data){ 
    $("*",data).each(function(){ 
     if($(this).attr("src")){ 
      $.ajax({url:$(this).attr("src"),dataType:"text"}); 
     } 
     if($(this).attr("href")){ 
      $.ajax({url:$(this).attr("href"),dataType:"text"}); 
     } 
    }); 
} 
//.... 
+1

これはそれでした!どうもありがとうございました! –

0

これはお探しですか?

$("body").load("page.html") 

(編集:) それとも、変数にpagecontentを保存したいですか?これは、$アヤックスで可能です:

 $.ajax({ 
     url: "page.html", 
     dataType: 'html', 
     success: function(data) { 
var pagecontents = data; 

} 
    }); 
+0

なぜ人々が投票しているのかわかりません。私はそれが彼が望むものだと思うが、おそらく彼はそれをHTMLから切り離された要素に貼り付けるだろう。 – scottheckel

+0

このアドレスは、ロードされたページのすべてのイメージCSSとスクリプトをどのようにプリロードしていますか? –

+0

申し訳ありません、それを持っています。私の投稿を無視して、あなたのコードは良い方法です。ごめんなさい! –

3

成功コールバック内で、htmlをドキュメントフラグメントに変換し、事前ロードしてプリロードするフラグメントを選択します。実際のプリロードを行うためのコードは含まれません。なぜなら、それは自分自身の問題であり、それを実行するために既に存在するプラグインがあるからです。

$.ajax(options).done(function(html){ 
    var $html = $(html), 
     imgArr = $.map($html.find("img"),function(img) { 
      return this.src; 
     }), 
     cssArr = $.map($html.find("link"),function(link) { 
      return this.href; 
     }); 
    // loop through and preload images and css. 
    ... 
    // once all are done loading, append to page. 
    $("#content").html($html); 
}); 

あなたがコンテンツを追加した後、しかし、あなたがそれらを切り離し、身体にそれらを追加したい場合、スクリプトをプリロードする必要はありません。

+0

これはイメージとCSSファイルをプリロードするだけではありませんか? – wecsam

+0

が正しく、javascriptをプリロードする必要はありません.HTMLがターゲットdivに追加された後で、ページに含める必要があります。 –

+0

必要なすべてのリソースをプリキャッシュするのがポイントではありませんか? – wecsam

1

ダウンロードする内容(またはフォーマットについての確信度)によって異なります。また、ダウンロードしたいものによって異なります。

たとえば、/<img[^>]*src(["'])([^"']+)\1[^>]*>/gのようなRegExpを使用できます。次に、function (a, q, src){var i = new Image(src)}のような捕捉関数を単純に使うことができます。

ダウンロードしたドキュメントフラグメントをDOMドキュメントフラグメントに添付し、DOMでそれを処理することもできます。これはより多くの資源を消費するかもしれません。

関連する問題