我有一个非常棘手的问题,我希望有人能对此有所启发。我正在使用Jquery从另一个网站(我拥有)检索Http响应。收到DOM后,我将对其进行解析以获取某些信息。但是,当我尝试获取链接的href属性时,IE会将本地域添加到href的开头!
这是我的代码:
$.ajax({ type: "POST", url: "MyPage.aspx/GetWebResponse", data: "http://myWebSite/pages/AnotherPage.aspx", contentType: "application/json; charset=utf-8", dataType: "json", asynch: false, success: function(data) { var __htmlForMainPage = data.d; var PageLink = $(__htmlForMainPage).find("a:contains('Get This Link')").attr("href"); } });
我的变量PageLink应该是“ /pages/getThisPage.aspx?id=8347”。但是,它将作为“ http://myserver/pages/getThisPage.aspx?id = 8347 ”返回。
这仅在IE中发生。FireFox很好。仅当我将其放在服务器上时,也会发生这种情况。当我在本地运行它时,无论在IE中还是在FF中,一切都可以正常运行。但是,当我将其放在服务器上时,FF仍然可以正常工作,但是IE却不能。
有没有人看过这个,或者知道这里发生了什么?任何帮助是极大的赞赏!
在IE中访问元素的hrefDOM属性时A,它将返回url的绝对路径。getAttribute()在IE7及更低版本中也是如此(因为getAttribute直到IE8才被破坏)。
href
A
getAttribute()
http://msdn.microsoft.com/zh- CN/library/cc848861(VS.85).aspx:
Internet Explorer 8或更高版本。 在IE8模式下, HREF 的值取决于对该属性的引用的上下文。当作为文档对象模型(DOM)属性读取时, HREF 返回相对于承载网页的域的URL。当以较早的文档兼容模式显示页面时,或者使用较早版本的浏览器查看页面时, HREF 作为内容属性读取时,将返回页面作者指定的值。有关更多信息,请参见Internet Explorer 8中的属性差异。
如果命名约定相同,jQuery将始终获取DOM属性:
// If applicable, access the attribute via the DOM 0 way if ( name in elem && notxml && !special ) { // ... }
name in elem这里的部分是检查是否已指定DOM属性。要针对IE8解决此问题,您可以将属性指定为大写.attr("HREF")--因为DOM属性区分大小写。不幸的是,IE7和更低版本的唯一解决方法是执行字符串替换:
name in elem
.attr("HREF")
var base = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1); PageLink = PageLink.replace(base, "");