2012-01-11 4 views
1

ウェブページをダウンロードして本文を抽出しようとしています。私は次のコードを持って考えるとjquery htmlがnullを返す

$.ajax({ 
    url: someAccessiblePublicUrlOnSameWebServer, 
    dataType: 'html', 
    success: function (data) { 
     //data is correct at this point 

     var body = $(data).find('body').html(); 

     //body is null. why ? 
    } 
}); 

successが呼び出され、dataが期待されるHTMLが含まれていますが、bodyは常にnullです。どうして ?

+0

実際のコードですか?空の 'body'変数を' .find() 'に渡しています。 –

+0

'data'がHTML文書全体である場合、いくつかのブラウザでは' '要素を見つけることに問題があります。 –

答えて

2
$.ajax({ 
    url: someAccessiblePublicUrl, 
    dataType: 'html', 
    success: function (data) { 
     var body = $(data).find('body').html(); 

    } 
}); 
+0

私はタイプミスを修正しましたが、同じ問題がありました。 –

1

あなたのタイプインがある可能性があります。

もしかして:

var body = $(data).find('body').html(); 

は、体の周りの単一ティックに注意してください。

+0

私はタイプを修正しましたが、それでも同じ問題があります。 –

+0

結果(データ変数)にタグがありますか? – Dan

0

typoでないかぎり、findメソッド内の "body"を引用符で囲む必要があります。

IE:あなたの問題である可能性var body = $(data).find('body').html();

+0

がタイプを修正しました。それでも同じ問題があります。 –

+0

@ChristofJans奇妙な。私はその問題を見る。私はvar contents = $(data).contents()var body = contents [1]を使用する回避策を見つけました。もちろん、これはページxhtmlの構造に依存します。 –

0

私の前回の返答に対する修正。

は、私は、これは

VAR本体= $( "身体"、$(データを))働くだろうと思い、ことを使用してこのスレッドparse html string with jquery

をチェックするHTML();

1

HTMLをAjax経由でロードすると、データが常に文字列として返され、通常のjQueryセレクタをレスポンスに適用できなくなります。データを$(data)に変換すると、$(data)は本体の内容のコレクション(jQuery内部のclean()メソッドで取り除かれます)として、bodyにアクセスすることもできなくなります。この意志は

$.get('http://your_url', function(data) { 

        $('.result').html(data); 

       }); 

:あなただけのどこかにあなたがこれを行うことができ、ドキュメントにロードされたHTMLのボディを追加したい場合は

:あなたは結果に何をしたいかに応じて、いくつかのオプションを持っています本体の内容だけを.resultコンテナにロードします。それ以上の処理をしたい場合はそこからセレクタにアクセスできます。

アタッチされていないフラグメントを操作したい場合は、フィルタ& getを使用して要素にアクセスできます。

$(data).filter('p').get() //will get all para DOM nodes 
$($(data).filter("#test2").get()).text() //will get text of one specific dom node 

あなたはそれをXMLとしてそれを処理するために速いかもしれない体のデータを処理したい場合は別のオプション - http://think2loud.com/224-reading-xml-with-jquery/でのXML処理一見のため。 例を使用すると、次のようになります。

$.ajax({ 
         url : "http://mypage", 
         dataType : 'xml', //change dataType to XML 
         success : function(data) { 
          //data is correct at this point 
          $(data).find('html').each(function() { 
//here you can find whatever you want        
a = $(this).find("body") 
           console.log(a); 

          }) 
         } 
        }) 
関連する問題