使用data.replace剥离所有图像?

时间:2012-01-04 02:35:21

标签: javascript jquery

我正在使用脚本从外部网站检索内容,并且返回日期并删除某些元素,以便它们不会干扰我将数据提取到的页面。但是,当我在错误控制台打开的情况下查看我的页面时,我在所有图像上都收到404。无论如何,我可以从脚本中删除所有图像,以便我只是获取文本(仍然在格式化标签中)?

$(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');
});

1 个答案:

答案 0 :(得分:2)

选项1:

您可以通过将此行添加到filterData()函数来删除图像:

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

这将替换所有以<img开头的字符串,然后包含除>以外的零个或多个字符且空字符串。

选项2:

您可以使用jQuery删除元素。在container.append()

之前插入此内容
justTable.find("img").remove();

这将找到表格中的所有img元素并将其删除。

<强>替代:

某些图片无法使用,因为其网址是相对的。如果<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');
 });