由于jquery的ajax无法跨域,因此我用服务端获取内容,然后再抓取该页面的返回内容。
问题如下:服务端抓取页面:getdata.asp
js代码:$.get("getdata.asp",function(data){
$(data).find("a").each(function(){
document.write($(this).attr("href")+";")
});
});结果:http://localhost/xxxxxxxx;http://localhost/xxxxxxxx;http://localhost/xxxxxxxx;

解决方案 »

  1.   

    data 是什么内容,你要处理成什么样
      

  2.   

    data是html代码啊,获取的链接地址成本地了,我想获取的链接地址的原内容。
      

  3.   

     
    $.get("getdata.asp",function(data){
    //xxxx.com是原来的域名
    data=data.replace(/xxxx\.com/ig,"localhost")
     document.write( data )
    });
      

  4.   

    感谢fzfei2,发现问题所在,原来是ie8的bug
      

  5.   

    ie8的bug 
    那我只能坐等散分了。
      

  6.   

    另外:$(data).find("a").each()
    标签A的数量过多,在这个过程中浏览器会卡死1秒钟,$(data).find("a").attr("href").join("|")方法不支持,请问还有除了each之外的其他方法把href合并起来?
      

  7.   

    先不要转DOM,直接字符串正则处理后再一起转DOM
    data=data.replace(/xxxx\.com/ig,"localhost")
      

  8.   

    dom之前转,还是把href集中起来转是一样的,我是集中起来之后转的。
    allurlinfo = allurlinfo.replace(window.location.host,urlconfig.href)现在的问题就剩下9楼的问题了,集中url的时候浏览器会卡死1秒
    我又看了一下jquery的文档,map也可以做到,但是也会卡死1秒。
      

  9.   

    map,get然后join
    attr('href')返回第一个a的href属性,字符串,当然没有join方法
    $(data).find("a").map(function(){return this.href}).get().join("|")
    再服务器端的getdata.asp处理连接对象,要不发送到本地后如果href不是带http协议的或者绝对路径(直接/aaa/aa),就会转为当前页面的路径+href的值不想在服务器端处理,获取href后要替换掉当前的域名或者路径$(data).find("a").map(function(){
    //////////////
    return this.href.relace('http://'+location.hostname+location.pathname,'')
    }).get().join("|")
      

  10.   

    问题总结:
    1、关于路径:ie6返回的正常的链接,都是准确的带有http://的,ie8下返回的http://localhost这样的,通过替换localhost的问题也能够得到解决,其前提是在getdata.asp中假如了base标签,ie8base标签有bug,ie9也没有得到解决,网上说有补丁,但是我找不到。其他浏览器由于不支持base返回的是原始链接,通过路径对比转换也能够得到解决。
    2、集中href内容:不管是each还是map都会导致浏览器卡死1秒,链接的数目大约是600+,暂无法解决。求教。
    3、新问题关于内存:由于大量使用ajax因此导致浏览器内存急速加大,每次获取后大约增加2M,通过CollectGarbage(),只能释放大约1M,内存基本上是有节奏的增加,+2,-1,+2,-1如此循环。虽然通过刷新页面能够解决,但是有没有不刷新页面而解决的方法?
      

  11.   

    你 $(data).find("a") 这样已经是DOM操作了,如果文档大就卡了用正则var hrefs=[];
    $.get("http://bbs.csdn.net/topics/390542730",function(data){
       data.replace(/<a .+?href\s*=\s*(['"])([^\1]*?)\1/ig,function(a,b,c){ hrefs.push(c)}) ;
       //如果你要 路径都变成本地地址 可以这处理
       alert(  hrefs.join('\n') )
    }),hrefs+""
     
      

  12.   


    alert( "<a>a1</a><a>a2</a>".match(/<a.*>/g) )//匹配成全部,匹配一次alert("<a>a1</a><a>a2</a>".match(/<a.*?>/g) ) //只匹配成<a>,匹配两次 
      

  13.   

    刚才也搜了一下关于贪婪的问题,明白了些,谢谢。不过我又有新问题了,呵呵,这个再加100分,正则的接上面问题:
     data.replace(/<a .+?href\s*=\s*(['"])([^\1]*?)\1/ig,function(a,b,c){ hrefs.push(c)}) ;我想在这个正则中获得<a>*<a>中*的内容,但是*的内容中可能有标签,有没有办只是改动一下正则就能够获取到剔除标签后的文本呢?比如<a><b>asdf</b>asdf</a>,获取到asdfasdf
      

  14.   

    用正则 "<a><b>asdf</b>asdf</a>".replace(/<.+?>/g,'')
    或 $("<a><b>asdf</b>asdf</a>").text()
      

  15.   

    1,你不转DOM就不会出现了
    2,3 ,直接字符串处理应该会好很多
    JQ的ajax应该不会出现内存泄露问题, 不要用闭包,大变量用后自己主动赋值空 试试
    太大可能考虑后台处理
      

  16.   

    原来全部都是后台处理,由于大量使用xmlhttp偶尔会出现加载失败,用On Error Resume Next也无法跳过
    花了2天时间改成客户端处理才有这些问题。
    最后还是要回到原点。
    暂时就这吧。