2009-07-27 11 views
0

問題は何ですか?ハイパーリンクの不要なプレフィックスInternet Explorer [Javascript]

私のコードはInternet Explorer(驚き)でしか正しく実行されません。以下の短いコードは、各 "a"タグに "onclick"アクションを追加する必要があります。これはうまくいきますが、5行目を見ると、2番目の関数引数をアンカータグの "href"属性の値に設定する必要があります。 WebKit、Mozillaなどでは問題ありません。 "href"を "lorem_ipsum"と設定し、MozillaなどのWebKitが正しい結果を取得し、2番目の関数引数を "lorem_ipsum"に設定した場合、Internet Explorerの接頭辞 "http://www.some.site/"が返され、2番目の引数として "http://www.some.site/lorem_ipsum"アンカータグの実際の値の「href」属性ではないため、Internet Explorerが正しくありません。

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

この不条理な問題を回避するにはどうすればよいですか?最後のスラッシュの前にすべての文字列を取り除く必要がありますか?それは長い間巻き込まれたアプローチのようです!何か案は?

答えて

1

簡単... ​​

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

簡単な解決策は、MSFTがHREFのソース値の代わりに絶対値を取得する(および他のブラウザを無視している)のために設けられた「2」フラグを使用することです。

this.getAttribute( "HREF"、2)

参考:高速な応答のためのhttp://www.quirksmode.org/bugreports/archives/2005/02/getAttributeHREF_is_always_absolute.html

+0

これはI.E.6でのみ有効です。それ以外のものはすべて、I.E.7を含む、それがどうやって起こるかを振り返ります。 – Jay

+0

あなたは何を意味するのか分かりません...私はIE7を二重チェックし、getAttribute( 'href')のフルパスとgetAttribute( 'href'、2)の望ましいソース定義の相対パスを返します。 。 IE8、Firefox、およびSafariは、getAttribute( 'href')またはgetAttribute( 'href'、2)のいずれかのソース値(相対パス)を返します。 元の投稿のように、ソース定義のパスが必要な場合は、( 'href'、2)をかなり確実に使用できますか? – RwwL

関連する問題