2009-07-27 2 views
0

В чем проблема?Нежелательное префикс гиперссылок Internet Explorer [Javascript]

Только в Internet Explorer (сюрприз) мой код выполнен неправильно. Короткое дерьмо кода ниже должно добавить действие «onclick» для каждого тега «a». Это работает чудесно, но посмотрите на пятую строку, он должен установить второй аргумент функции значению атрибута «href» тега привязки. В WebKit, Mozilla и т. Д. Все в порядке. Если мы установим «href», чтобы сказать «lorem_ipsum», то WebKit, Mozilla и т. Д. Вернет правильный результат и установите второй аргумент функции «lorem_ipsum», префиксы Internet Explorer «http://www.some.site/», поэтому мы видим, что «http://www.some.site/lorem_ipsum» представлен как второй аргумент. Internet Explorer неверен, поскольку это не атрибут «href» фактического значения тега привязки.

Anchors=Parent.getElementsByTagName("a"); 
Anchor=0; 
while(Anchor<Anchors.length){ 
    Anchors[Anchor].onclick=function(){ 
     Plot("",this.getAttribute("href")); 
     return false; 
    }; 
    Anchor++; 
}; 

Как я могу обойти эту абсурдную проблему? Нужно ли мне удаляться от строки до финальной косой черты? Это похоже на длинный изгиб! Есть идеи?

ответ

1

Easy ...

Anchors[Anchor].onclick=function() { 
    var href = this.href || this.getAttribute("href"); 
    if(href.indexOf(location.href) >= 0) 
     href = href.substring(location.href.length); 

    Plot("", href); 
    return false; 
}; 
+0

Спасибо за быстрый ответ. Не могли бы вы объяснить свой ответ, чтобы я мог понять, почему это произошло и как вы его исправили. KR, Jay – Jay

+0

location.href - это предопределенная переменная, содержащая URL-адрес текущего окна. Я беру атрибут HREF из ссылки, и если он содержит это значение, я подставляю его, чтобы отключить его. Просто. –

+0

Я считаю, что это не сработает, если на странице указан тег BASE. Я считаю, что проблема, когда getAttribute (HREF) возвращает полный URL-адрес, была исправлена ​​в режиме стандартов IE8. http://msdn.microsoft.com/en-us/library/ms535173%28VS.85%29.aspx# – EricLaw

0

Более простое решение заключается в использовании «2» флаг, который MSFT при условии для получения исходного значения из HREF вместо абсолютного значения (и который игнорируется другими браузерами):

this.getAttribute ("HREF", 2)

Ref: http://www.quirksmode.org/bugreports/archives/2005/02/getAttributeHREF_is_always_absolute.html

+0

Это хорошо работает в I.E.6. Все остальное ведет себя так, как это бывает с фантазией, включая I.E.7, извините. – Jay

+0

Не уверен, что вы имеете в виду ... Я просто дважды проверял IE7 и, как и IE6, возвращает полный путь для getAttribute ('href') и желательный относительный путь для getAttribute ('href', 2) , IE8, Firefox и Safari возвращают исходное значение (относительный путь) для getAttribute ('href') или getAttribute ('href', 2). Итак, если вы хотите, чтобы путь, определенный источником, как в исходном сообщении, вы можете использовать ('href', 2) довольно надежно, нет? – RwwL

Смежные вопросы