2012-01-04 3 views
0

J'utilise un script pour extraire le contenu d'un site Web externe, et la date est renvoyée avec certains éléments supprimés afin qu'ils n'interfèrent pas avec la page vers laquelle je tire les données. Cependant, quand je regarde ma page avec la console d'erreur ouverte, je reçois 404s sur toutes les images. Y at-il de toute façon je peux enlever toutes les images du script de sorte que je reçois juste le texte (qui est toujours dans ses étiquettes formatées)?Supprimer toutes les images avec 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'); 
}); 

Répondre

2

Option 1:

Vous pouvez dépouiller les images en ajoutant cette ligne à filterData() fonction:

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

Cela remplacera toutes les chaînes commençant par <img et contenant zéro ou plus caractères autres que > avec une chaîne vide.

Option 2:

Vous pouvez utiliser jQuery pour supprimer les éléments. Insérer cette avant container.append():

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

Ceci trouvera tous img éléments à l'intérieur de la table et les supprimer.

Alternative:

Certaines images ne sont pas disponibles parce que leur URL est relative. Si vous avez <img src="logo.png"> sur http://example.com/page.html alors le navigateur charge l'image de example.com/logo.png. Si vous incluez la même balise <img> sur votre page http://own.com/my.html alors le navigateur tentera de charger own.com/logo.png.

Vous pouvez résoudre ce problème en modifiant l'attribut src des images pour inclure le domaine dont vous avez extrait la page.

Exemple (non vérifié, peut nécessiter des modifications):

// 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

Oui, cela fonctionne parfaitement. Que font les différentes parties? – Charlie

+1

@Charlie: Explication ajoutée et une proposition alternative au cas où vous voulez que ces images soient chargées correctement :). – kubetz

Questions connexes