1

我站点中的用户可以从任何其他站点复制整个页面(通过 Ctrl+A)并粘贴到特殊的文本区域以从 html 中获取一些有用的数据。

但现在我看到了一些问题。当我用 jQuery 包装粘贴的 html 代码时:

var page = $(html);

我的浏览器(Chrome)开始下载此 html 中存在的所有图片(可能不仅仅是图片)。这对我很不利,因为我使用安全 SSL 连接并从另一个站点下载图片删除了浏览器安全锁图标。

我可以关闭图片下载吗?或者如果我不能 - 我可以使用哪个库来解析 html 而无需下载不必要的内容?

4

2 回答 2

1

img在将其传递给 jQuery 之前,您可以运行一个正则表达式来删除所有标签:

例如:

$( html.replace( /<img .*?>/ig, '' ) );​​​​

有关正则表达式修饰符和语法的更多信息,请查看 MDN: https ://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

于 2012-07-12T14:42:43.560 回答
0

$(html)让 jQuery 实际上将 html 代码注入到隐藏的页面中,以计算宽度、高度、样式、距离、属性等。此操作总是使用浏览器内置的 DOM 解析器,这就是为什么图像、iframe、背景图像,脚本,链接等被访问。

您可以使用$.parseXML(html); ,但 html 代码需要是有效格式的 xml (xhtml)。

如果您唯一关心的是图像,那么您可以使用以下代码:

// take the src attribute, change it to hiddensrc
// credits: http://stackoverflow.com/a/1310706/608886
var html = html.replace(/<img([^>]*)\ssrc=(['"])(?:[^\2\/]*\/)*([^\2]+)\2/gi, 
    "<img$1 hiddensrc=$2$3$2");

// parse the code
var parsed = $(html);

///////////////
//
//   do whatever you want here
//
//////////////

// put the src attribute back at your discretion
parsed.find(img[hiddensrc]).each(function(){ 
    $(this).attr('src',$(this).attr('hiddensrc')); 
}); 
于 2012-07-12T14:56:32.590 回答