一尘不染

jQuery在IE中无法正确解析attr(“ href”)

ajax

我有一个非常棘手的问题,我希望有人能对此有所启发。我正在使用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却不能。

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


阅读 444

收藏
2020-07-26

共1个答案

一尘不染

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

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和更低版本的唯一解决方法是执行字符串替换:

var base = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1);
PageLink = PageLink.replace(base, "");
2020-07-26