JQuery没有在IE中正确解析attr("href")

vcu*_*kit 6 ajax jquery internet-explorer

我有一个非常奇怪的问题,我希望有人可以解释一下.我正在使用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"); 
                                                }   
                });
Run Code Online (Sandbox Code Playgroud)

我的变量PageLink应该是"/pages/getThisPage.aspx?id=8347".但是,它被返回为" http://myserver/pages/getThisPage.aspx?id = 8347 ".

这只发生在IE中.FireFox很好.这也只有在我把它放在服务器上时才会发生.当我在本地运行它时,一切正常,在IE和FF中.但是当我把它放在服务器上时,FF仍然可以正常工作,但IE却没有.

有没有人见过这个,或者知道这里发生了什么?任何帮助是极大的赞赏!

And*_*y E 9

在IE中访问元素的hrefDOM属性时A,它将返回url的绝对路径.getAttribute()在IE7和更低版本中也是如此(因为getAttribute在IE8之前被破坏).

http://msdn.microsoft.com/en-us/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 ) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

name in elem这里的部分是检查是否已指定DOM属性.要解决这个问题,你可以用大写的方式指定属性.attr("HREF")- 因为DOM属性区分大小写.不幸的是,IE7及更低版本的唯一解决方法是执行字符串替换:

var base = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1);
PageLink = PageLink.replace(base, ""); 
Run Code Online (Sandbox Code Playgroud)