2012-01-04 11 views
0

私は外部のウェブサイトからコンテンツを取得するためにスクリプトを使用しています。データが取り出されるページに干渉しないように、特定の要素を取り除いた日付が返されます。しかし、エラーコンソールを開いた状態で私のページを見ると、私はすべての画像に404を受け取っています。とにかく、スクリプトからすべてのイメージを取り除いて、テキストを取得していますか(まだフォーマットされたタグに入っていますか)?すべての画像をdata.replaceで取り除きますか?

$(document).ready(function() { 
    var container = $('#target'); 

    function doAjax(url) { 
     if (url.match('^http')) { 
      $.getJSON("http://query.yahooapis.com/v1/public/yql?" 
      + "q=select%20*%20from%20html%20where%20url%3D%22" 
      + encodeURIComponent(url) 
      + "%22&format=xml'&callback=?", 
      function (data) { 
       if (data.results[0]) { 
        var fullResponse = $(filterData(data.results[0])), 
         justTable = fullResponse.find("table"); 
        container.append(justTable); 
       } else { 
        var errormsg = '<p>Error: could not load the page.</p>'; 
        container.html(errormsg); 
       } 
      }); 
     } else { 
      $('#target').load(url); 
     } 
    } 
    function filterData(data) { 
     data = data.replace(/<?\/body[^>]*>/g, ''); 
     data = data.replace(/[\r|\n]+/g, ''); 
     data = data.replace(/<--[\S\s]*?-->/g, ''); 
     data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g, ''); 
     data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g, ''); 
     data = data.replace(/<script.*\/>/, ''); 
     return data; 
    } 
    doAjax('mywebsite'); 
}); 

答えて

2

オプション1:

あなたはfilterData()機能に次の行を追加することで画像を取り除くことができます。

data = data.replace(/<img[^>]*>/g, ''); 

これは、すべての文字列<imgで始まり、その後、ゼロ個以上を含む置き換えられます>以外の文字は空文字列です。

オプション2:

あなたは要素を削除するにはjQueryを使用することができます。 container.append()前にこれを挿入します。

justTable.find("img").remove(); 

これは、テーブル内のすべてのimgの要素を見つけ、それらを削除します。

オルタナティブ:そのURLが相対的であるため、

いくつかのイメージが使用できません。 <img src="logo.png">http://example.com/page.htmlにある場合、ブラウザはexample.com/logo.pngから画像をロードしています。同じ<img>タグをページに含めると、http://own.com/my.htmlブラウザはown.com/logo.pngを読み込もうとします。

イメージのsrc属性を変更して、ページを取得したドメインを含めることで、この問題を解決できます。

例(完全にテストされていない、修正が必要な場合があります):

// copy everything for url except the string after last "/" character 
// so if url == http://example.com/page.html then path == http://example.com/ 
var path = url.match("(.+/)[^/]+$")[1]; 

// modify all local images (value of src attribute not starting with "http://") 
justTable.find('img').not('[src^="http://"]').attr('src', function() { 
    return path + $(this).attr('src'); 
}); 
+0

はい、これは完璧に動作します。個々の部品は何をしていますか? – Charlie

+1

@Charlie:正しく読み込まれた画像が必要な場合のための説明と代替提案を追加しました:) – kubetz

関連する問題