JQuery, Не Анализирующий Правильно attr (“href”) в IE

У меня есть действительно странная проблема, что я надеюсь, что кто-то может пролить некоторый свет на. Я использую 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 все еще хорошо работает, но IE не делает.

Кто-либо видел это прежде или знает то, что продолжается здесь? Любая справка значительно ценится!

6
задан Martin 26 February 2010 в 16:07
поделиться

4 ответа

При доступе к свойству DOM href элемента A в IE он вернет абсолютный путь к 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 ) {
    // ...
}

Имя в элементе здесь проверяет, не указано свойство DOM. Чтобы обойти это в IE8, вы можете указать свойство в верхнем регистре - .attr ("HREF") - потому что свойства DOM чувствительны к регистру. К сожалению, единственный обходной путь для IE7 и ниже - выполнить замену строки:

var base = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1);
PageLink = PageLink.replace(base, ""); 
9
ответ дан 9 December 2019 в 20:42
поделиться

Это не проблема jquery, это является причудой ie. Это легко исправить " http: //myserver/pages/getThisPage.aspx? id = 8347 " .replace (' http: // myserver ', '').

2
ответ дан 9 December 2019 в 20:42
поделиться

Разные браузеры возвращают разные значения атрибутов URL. Нормализация URL - это ваша работа. Я использую такое регулярное выражение:

var urlParts = /^(https?:\/\/.+?)?(\/.+?)(\?.*?)?$/.exec(href);
var server = urlParts[1]; // maybe be '' depending on the browser
var path = urlParts[2];
var query = urlParts[3];

Итак, вам нужен путь + запрос.

0
ответ дан 9 December 2019 в 20:42
поделиться

Проблема" заключается в том, что то, что вы видите в ваших HTML-источниках, не является тем, что jQuery "видит" в браузере DOM-Tree.

Это означает, что IE, скорее всего, просто сохраняет абсолютные URL внутри a-Nodes вашего DOM (в то время как другие браузеры этого не делают, но для браузера это не имеет значения, потому что он в любом случае может работать только с абсолютными URL, так что рано или поздно ему придется вычислять этот абсолютный URL).

Теперь jQuery просто возвращает значения, которые хранятся в DOM-дереве.

Если вы хотите проверить это, просто возьмите Firebug! Там вы можете просмотреть DOM (а с IE8 есть нечто подобное и в IE).

1
ответ дан 9 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: