2009-07-27 10 views
0

Quel est le problème? Seulement dans Internet Explorer (surprise) mon code est exécuté incorrectement. La petite connerie de code ci-dessous devrait ajouter une action "onclick" à chaque balise "a". Cela fonctionne à merveille, mais regardez la cinquième ligne, il devrait définir le deuxième argument de la fonction à la valeur de l'attribut "href" de la balise d'ancrage. Dans WebKit, Mozilla etc. c'est bien. Si nous définissons "href" pour dire "lorem_ipsum" alors WebKit, Mozilla etc. récupèrent le résultat correct et définissons le second argument de la fonction sur "lorem_ipsum", Internet Explorer préfixe "http://www.some.site/" donc nous voyons "http://www.some.site/lorem_ipsum" comme second argument. Internet Explorer est incorrect car ce n'est pas l'attribut "href" de la valeur réelle de la balise d'ancrage.Préfixage indésirable des liens hypertexte Internet Explorer [Javascript]

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

Comment puis-je contourner ce problème absurde? Aurais-je besoin de décoller de la chaîne tout avant le dernier slash? Cela semble une approche longue et sinueuse! Des idées?

Répondre

1

facile ...

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

Merci pour la réponse rapide. Pourriez-vous s'il vous plaît expliquer votre réponse afin que je puisse voir pourquoi cela s'est passé et comment vous l'avez réparé. KR, Jay – Jay

+0

location.href est une variable prédéfinie contenant l'URL de la fenêtre en cours. J'attrape l'attribut HREF du lien, et s'il contient cette valeur, je le sous-distrait pour le retirer. Simple. –

+0

Je crois que cela ne fonctionnera pas si la page spécifie un tag BASE. Je crois que le problème où getAttribute (HREF) renvoie l'URL complète a été corrigé en mode standard IE8. http://msdn.microsoft.com/en-us/library/ms535173%28VS.85%29.aspx# – EricLaw

0

Une solution plus simple est d'utiliser le drapeau « 2 » que MSFT prévu pour obtenir la valeur source de HREF au lieu de la valeur absolue (et qui est ignoré les autres navigateurs):

this.getAttribute ("href", 2)

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

+0

Cela ne fonctionne bien que dans I.E.6. Tout le reste se comporte comme il se passe, y compris I.E.7, désolé. – Jay

+0

Je ne sais pas ce que vous voulez dire ... J'ai juste vérifié IE7 et, comme IE6, il renvoie un chemin complet pour getAttribute ('href') et le chemin relatif défini par la source pour getAttribute ('href', 2) . IE8, Firefox et Safari renvoient la valeur source (chemin relatif) pour getAttribute ('href') ou getAttribute ('href', 2). Donc, si vous voulez le chemin défini par la source, comme dans la publication d'origine, vous pouvez utiliser ('href', 2) assez fiable, non? – RwwL