由于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;
问题如下:服务端抓取页面: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;
解决方案 »
- <bgsound loop="0" src="flourish.mid"/>怎么用按钮停止播放声音?
- 请教前辈,在js中可以把String类型转换成Function类型吗?
- IE7 Image对象的readyState属性问题
- 高手帮忙,JS传递变量出错。。。
- [求助]jsp+javaScript 动态三级下拉菜单.
- 日期格式如2007-12-25 如何确定该日期转换为星期几?
- 弹出一个小窗口
- 请问怎么得到隐藏列的innerText值
- 怎么样使<input type="text">的长度随着输入的文字的增长而变动
- showModalDialog有时显示不出来!! sos!!
- jquery @ 的作用
- 大神帮忙看看这段代码除了IE内核浏览器显示以外,其余的均不显示,如360、火狐等
$.get("getdata.asp",function(data){
//xxxx.com是原来的域名
data=data.replace(/xxxx\.com/ig,"localhost")
document.write( data )
});
那我只能坐等散分了。
标签A的数量过多,在这个过程中浏览器会卡死1秒钟,$(data).find("a").attr("href").join("|")方法不支持,请问还有除了each之外的其他方法把href合并起来?
data=data.replace(/xxxx\.com/ig,"localhost")
allurlinfo = allurlinfo.replace(window.location.host,urlconfig.href)现在的问题就剩下9楼的问题了,集中url的时候浏览器会卡死1秒
我又看了一下jquery的文档,map也可以做到,但是也会卡死1秒。
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("|")
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如此循环。虽然通过刷新页面能够解决,但是有没有不刷新页面而解决的方法?
$.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+""
alert( "<a>a1</a><a>a2</a>".match(/<a.*>/g) )//匹配成全部,匹配一次alert("<a>a1</a><a>a2</a>".match(/<a.*?>/g) ) //只匹配成<a>,匹配两次
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
或 $("<a><b>asdf</b>asdf</a>").text()
2,3 ,直接字符串处理应该会好很多
JQ的ajax应该不会出现内存泄露问题, 不要用闭包,大变量用后自己主动赋值空 试试
太大可能考虑后台处理
花了2天时间改成客户端处理才有这些问题。
最后还是要回到原点。
暂时就这吧。