2016-05-18 8 views
1

私はjQueryのAJAX呼び出しを持っている:なぜこのAJAXレスポンスの一部を使用できないのですか?

$.ajax ({ 
    url : 'foo/bar/', 
    success: function(data) { 
     console.log(data); 

     var newHeaderText = $(data).find('#header-text').text(); 
     $("#header-text").text(newHeaderText); 

     var newContent = $(data).find('#content').html(); 
     console.log(newContent); 
     $("#content").html(newContent); 
    } 
}); 

ザ・が正常dataを記録し、対象ページの完全なHTMLを示しています。

header-textセクションは期待どおりに機能します。

console.log(newContent)ただし、undefinedを返します。 foo/bar/のhtml全体を投稿していないと、contentというIDのdivがdataにあり、それに多くの子要素があることは間違いありません。

なぜ私の試みは1ページの内容をつかんで、別のページの内容に動かないのですか? header-textがうまくいくように見えるので、私にとっては特に混乱します。

+2

セミコロンはかなりありません。 –

+0

jsは私の母国語ではありません= P。編集されました。 – fildred13

+0

@BramVanroy私は間違っている(私はJSで経験がない)私を修正してください、しかしJSは実際にはセミコロンを必要としません*セミコロンですか? –

答えて

3

代わり$.parseHTMLを試みることができる:

var newContent = $($.parseHTML(data)).find('#content'); 

#contentはトップレベルの要素である場合には、上記のコードはまだそれを逃すかもしれません。次に、コンテナにHTMLを読み込んでそこで要素を見つけて解決することができます。

var newContent = $('<div>').append($.parseHTML(data)).find('#content'); 
+0

の子孫を見て以来、あなたはそれを得るために.filter使用する必要があると思いますので、私はちょうど、緻密だし、ということを忘れてしまった、 – fildred13

+2

フィルタはトップレベルの要素であることがわかっている場合に機能します。しかし、もしあなたが知らないのであれば?いずれの場合も、コンテナ内からの検索が成功するでしょう。私のテストから、最初のコードはトップの要素にも作用するので、それは簡単かもしれません。 – trincot

+0

堅牢性を追加する興味深い方法。ヒントをありがとう! – fildred13

関連する問題