18

我从其他页面加载 HTML 以从该页面提取和显示数据:

$.get('http://example.org/205.html', function (html) {
    console.log( $(html).find('#c1034') );
});

这确实有效,但由于$(html)我的浏览器尝试加载在 205.html 中链接的图像。这些图像在我的域中不存在,所以我收到很多 404 错误。

有没有办法像解析页面一样$(html)但不将整个页面加载到我的浏览器中?

4

7 回答 7

18

使用正则表达式并删除所有<img>标签

 html = html.replace(/<img[^>]*>/g,"");
于 2013-02-27T14:01:37.570 回答
16
于 2018-05-05T23:03:43.590 回答
3

很抱歉恢复了一个老问题,但这是搜索如何尝试阻止已解析的 html 加载外部资产时的第一个结果。

我接受了 Nik Ahmad Zainalddin 的回答,但它有一个弱点,即<script>标签之间的任何元素都会被清除。

<script>
</script>
Inert text
<script>
</script>

在上面的示例Inert text中,将连同脚本标签一起被删除。我最终改为执行以下操作:

html = html.replace(/<\s*(script|iframe)[^>]*>(?:[^<]*<)*?\/\1>/g, "").replace(/(<(\b(img|style|head|link)\b)(([^>]*\/>)|([^\7]*(<\/\2[^>]*>)))|(<\bimg\b)[^>]*>|(\b(background|style)\b=\s*"[^"]*"))/g, "");

此外,我添加了删除iframes 的功能。

希望这可以帮助某人。

于 2016-06-17T02:16:03.617 回答
3

使用以下方式解析 html 会自动加载图片。

var wrapper = document.createElement('div'),
    html = '.....';
wrapper.innerHTML = html;

如果用于DomParser解析 html,则不会自动加载图像。有关详细信息,请参阅https://github.com/panzi/jQuery-Parse-HTML/blob/master/jquery.parsehtml.js

于 2015-11-20T11:09:07.580 回答
1

您可以使用 jQuerysremove()方法来选择图像元素

console.log( $(html).find('img').remove().end().find('#c1034') );

或从 HTML 字符串中删除 then 。就像是

console.log( $(html.replace(/<img[^>]*>/g,"")) );

关于背景图像,您可以执行以下操作:

$(html).filter(function() {
    return $(this).css('background-image') !== ''; 
}).remove();
于 2013-02-27T14:02:13.230 回答
1

以下正则表达式替换 ajax 加载返回的数据字符串中所有出现的<head>, <link>, <script>, <style>, 包括backgroundstyle属性。

html = html.replace(/(<(\b(img|style|script|head|link)\b)(([^>]*\/>)|([^\7]*(<\/\2[^>]*>)))|(<\bimg\b)[^>]*>|(\b(background|style)\b=\s*"[^"]*"))/g,"");

测试正则表达式:https ://regex101.com/r/nB1oP5/1

我希望有一种更好的解决方法(除了使用正则表达式替换)。

于 2016-01-02T08:24:38.357 回答
0

您可以使用以下正则表达式来删除所有 src 属性,而不是完全删除所有 img 元素:

html = html.replace(/src="[^"]*"/ig, "");
于 2017-04-28T00:42:28.863 回答