Jquery如何在parseHTML时停止自动加载图像

时间:2013-03-01 03:59:46

标签: jquery image load

我有一个使用Jquery $ .ajax的页面来获取另一个页面的html代码。 这是它的样子:

    <html><head>
    <script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script language="JavaScript" type="text/javascript">
    <!--
$(function(){
        $.ajax({
            url:another_page_url,
            async:false,
            dataType:"text",
            success:function(doc){ 
                //do something with $(doc) 
                //e.g. alert($(doc).find('img').attr('src'));}
        });
});
    //-->
    </script>
    </head>
    <body>
        <pre id="result" style="word-wrap: break-word; white-space: pre-wrap;"></pre>
    </body></html>

another_page_url是一个包含大量图片的网页:

<img src="http://ww3.sinaimg.cn/mw600/50cdeb22jw1e2a35t0w8ag.gif">

问题是当我在成功加载后调用$(doc)(等于$ .parseHTML(doc))时,Jquery启动ajax获取请求以加载doc中包含的所有图像。我的问题是如何防止这种自动加载的事情?我只想要图片网址字符串而不是这些真实图片。

P.S。如果我设置dataType =“xml”会出现一个prase错误。(似乎我要加载的页面不是xml兼容的,我无法更改它。)设置dataType =“html”等于调用$(doc这导致我遇到同样的情况。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

谢谢大家。我的问题解决了这样:

$.ajax({
    url:url,
    async:false,
    dataType:"text",
    success:function(doc){ 
        var new_doc = doc.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, function (match, capture) {return "<img no_load_src=\"" +capture+ "\" />";});
        parse_function(new_doc);
    },
    error:function(jqXHR, textStatus, errorThrown){ alert(textStatus); }
});

解决这个问题只需两步:

  • 在$ .ajax调用中明确设置dataType =“text”,以便jquery不会检测并解析返回 html文件。
  • 在使用之前使用正则表达式替换所有img标签的src属性。(我将&lt; img属性src =“somewhere”/&gt;更改为&lt; img no_load_src =“somewhere”/&gt;以防止jquery加载真实的形象。)

答案 1 :(得分:0)

每当您发出加载html数据的请求时,也始终将其视为html。 因此,如果您希望将html作为字符串,则需要将&lt; 替换为&amp; lt ,将&gt; 替换为&amp; gt

请参考以下内容:

success:function(doc){ 

    // create dynamic temporary div
    var div = $("<div />" , { id : 'temp-container' });

    // appned reposne html into div 
    $(div).html(doc);


    var img_url = $(div).find('img').attr('src'); 

            // check firebug console
    console.log(img_url);   


}

您可以找到任何属性。没有必要将顶部附加到体内。
希望它适合你。 祝你好运