2013-03-01 70 views
1

我有一个页面使用Jquery $ .ajax来获取另一个页面的html代码。 这里是什么样子:jquery如何在parseHTML时停止自动加载imges

<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兼容的,我不能改变它)。set dataType =“html”等于调用$(doc ),这导致了我相同的情况。

感谢您的帮助。

+0

为什么不使用json作为数据类型? – sqram 2013-03-01 04:03:52

+0

感谢您的回复。因为我想加载的页面是一个大的HTML页面,我不知道如何设置dataType ='json'。 – 2013-03-01 04:09:32

+0

@katsh我刚通过设置dataType ='json'得到了一个prase错误,因为返回的数据是一个HTML内容。 – 2013-03-01 04:18:13

回答

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); } 
}); 

只需两个步骤来解决这个问题:

  • 明确设置的dataType =“文本”在$就调用,这样jQuery将不检测和解析返回 html文档。
  • 使用正则表达式来使用它之前更换所有img标签的src属性。(我改变< IMG src属性=“某处”/>到< IMG no_load_src =“某处”/>到以免jQuery负载实像。 )
0

无论何时您提出加载html数据的请求,它也会始终被视为html。 所以,如果你希望你的HTML作为字符串,那么你需要用& GT与& LT>更换<

请参考如下:

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); 


} 

你可以找到任何属性。没有必要将其附加到身体中。
希望它对你的工作正常。 祝你好运

+0

感谢您的建议,但我并不真正想要纯html字符串。我想过滤$(doc)中的一些元素,如下所示:var img_url = $(doc).find('img')。attr('src');但只要我打电话给$(doc),我的浏览器就开始载入doc中的所有图像。 – 2013-03-01 05:06:59

+0

你的意思是说你想要一个从html的图像源数组没有别的。 – Surinderpal 2013-03-01 05:38:13

+0

只是源URL和其他一些属性值。基于字符串的解析将是一项艰巨的任务,所以我需要$(doc)。 – 2013-03-01 06:18:28

相关问题