

jQuery.ajax()で外部HTMLファイルを読み込んで要素を取得したいのですが、  
find, filter関数でid名やクラス名を指定しても取得できません。どうしたら良いのでしょうか？  
ちなみに、同じクラス名をもつ複数の要素も配列で取得したいです。

[code]

    $(document).ready(function(){
        $.ajax({
            url:'http://yahoo.co.jp',
            type: 'GET',
            dataType: "html",
            success: function(res) {
            var data = $(res)[0].responseText; //文字列で取得できています
    
            var content = $(res.responseText).find('id名').text(); //取得できません
            console.log(content);  
    
            }
        });
    });
    
[/code]


CC BY-SA 3.0
2017-10-17T12:39:07.303
38804
2017-10-20T03:07:04.870
question
javascript html jquery ajax
jQuery.ajax()で外部HTMLファイルを読み込んで要素を取得したい


.parseHTML()と .filter() を使うとどうでしょう？

[code]

            $(function(){
                var str1 = '';
                str1 += '<html>';
                str1 += '<body>';
                str1 +=     '<h1>test</h1>';
                str1 +=     '<div id="hoge"  style="background-color: chartreuse">こ れそれあれ</div>';
                str1 += '<div>hoge</div>';
                str1 += '</body>';
                str1 += '</html>';
                var jq_obj = $($.parseHTML(str1));
                $("#data").append(jq_obj.filter("#hoge"));
            });
[/code]

[code]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <body id="data">
    
    </body>
[/code]


CC BY-SA 3.0
2017-10-19T15:12:55.503
38874
2017-10-19T15:53:06.473
2017-10-19T15:53:06.473
22793
22793
38804
answer


jquery.xdomainajax.js＋サンプルコードで試したわけではないですが、ブラウザでyahooのソースを表示、コピーして試してみたところ、たしかに取得できない事象に遭遇しました。

原因ですが、帰ってきたレスポンスHTMLを、そのまま`$(レスポンスHTML)`というふうにjQuery関数に渡しても、正しくjQueryオブジェクトに変換できないようです。原因はHTMLの一行目にある以下の記述だと思われます。

[code]

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
[/code]

jQueryはxmlをパースできないので、この文が悪さしているようです。  
試しにこの行を削ってみると上手くいきました。

[code]

    var $jq = $(レスポンスHTML.replace('<!DOCTYPE[^>]+>', ''))
    $jq.find('#dsearch').text() //=> "辞書"
    
[/code]


CC BY-SA 3.0
2017-10-20T03:07:04.870
38887
2017-10-20T03:07:04.870
9608
38804
answer