2012-01-05 14 views
0

このHTMLページがあり、別のページのHTMLコンテンツを収集するjQueryメソッドを作成したいとします。jQuery:特定のタグ内でHTMLを取得する

<script> 
var page; 
$(document).ready(function() { 

$.ajax({ 
     type : "GET", 
    url : "template.html", 
    dataType : "html", 
    success : function(html) { 
    page = $(html).find('body').html(); 
      //do something 

       } 
      }); 
     }); 

    </script> 

が、それはdoesnの:私のようなものを作ってみた

例えば、私は...子タグ、属性、テキストなど、タグの間にHTMLコンテンツを取得したいですトリックをしないでください。 ありがとうございました。

+0

別のhtmlファイルを作成しますか? – Dau

+0

「それはトリック*をしません」という意味ですか? ajaxリクエストは正常に完了しますか? 'html'変数は、あなたが期待しているものが入っていますか? ..何が間違っていますか? –

+0

@Hemant:HTMLを抽出して処理し、現在のページに表示する必要があります。 – Lorenzo

答えて

4

JQueryロード関数を使用できます。

$('#result').load('ajax/test.html #container'); 

この関数は、ページajax/test.htmlからID containerとのdivからHTMLをロードし、ID resultでのdivの中にHTMLを置きます。

ソース:http://api.jquery.com/load/

+0

これは私が探していたものです、ありがとうマチュー。 – Lorenzo

0

問題は、jQueryの文字列として全体htmlページを解析していないということです。..

複雑なHTMLを渡した場合、一部のブラウザでは正確にHTMLを複製することをDOMを生成しない場合がありますソースが提供されます。前述のように、ブラウザの.innerHTMLプロパティを使用して渡されたHTMLを解析し、それを現在のドキュメントに挿入します。このプロセス中に、いくつかのブラウザは、<html><title>、又は<head>要素などの特定の要素を除外します。その結果、挿入された要素は、渡された元の文字列を表していない可能性があります。

ですから、

回避策..この制限を回避する必要がありますが、手動でHTML要素に返されたHTMLを追加することです。

success : function(html){  
      var ndoc = document.createElement('html'); 
      ndoc.innerHTML = html; 
      page = $('body', ndoc); 
      console.log(page); 
      } 
+0

ええと、私はこの方法でHTMLを抽出することができますが、.innerHTML javascriptを使って表示することはできません。おそらく、ページはすでにレンダリングされているからでしょうか? – Lorenzo

+0

@Lorenzo、あなたが何を意味するのか分からない.. 'page'変数は、ajaxの結果の' body'タグをjQuertオブジェクトとしてメモリに保持します(* console.logはデバッグ用ですので削除する必要があります) –

+0

私は、ページ変数を渡すjavascript関数を呼び出そうとすると、この関数では、収集したHTMLを現在のHTMLに注入しようとしていますが、表示されていないのに対し、$( '#result' ).load( 'ajax/test.html #container');私は実際のHTMLを見ることができます – Lorenzo

関連する問題