我正在使用脚本从外部网站检索内容,并且返回日期并删除某些元素,以便它们不会干扰我将数据提取到的页面。但是,当我在错误控制台打开的情况下查看我的页面时,我在所有图像上都收到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');
});
答案 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');
});