2012-05-06 6 views
2

ブラウザには、現在のURLからlocation.hrefhashqueryなどを取得するための非常に効率的なURLパーサーがあります。私はregexesを使用して何かをコーディングする代わりにそれを使用したいと思います。javascriptでページをリダイレクトせずにURLを解析するためにlocationオブジェクトを使用するにはどうすればよいですか?

location.hrefを設定するか、location.replace(url)を設定すると、Chromeでページがリダイレクトされます。このブラウザではプロトタイプの場所を取得しようとしましたが、location.prototypeが見つかりません。 は、jsコンソールのLocationクラスとして記述されていますが、インスタンス化する方法が見つかりません。さらに、クロスブラウザソリューションが必要です。__proto__はIEでは利用できません。

もし私が正規表現の代替手段を与えていない場合は、証拠とともにバックアップすることができれば、難しい真実を教えてください。

+0

+1「可能でない場合は、私に正規表現の代わりを与えてはいけません。ちょうどハードな真実を教えてください。それは、このようなタイトルで質問に行くのが大変だけど、それから普通の選択肢を得るだけです...それ自体は良い答えです。しかし、このケースでは、それが可能であるだけでなく、簡単に*できるので、さらに優れています!わーい! –

答えて

5

はい、非常に可能です!新しいaオブジェクトを作成した場合は、ブラウザをリダイレクトせずに場所フィールドを使用できます。例えば

:あなたは今.hashアクセスできる

var a = document.createElement('a'); 
a.href = "http://openid.neosmart.net/mqudsi#fake" 

.pathname.host、および他のすべての場所のグッズ!

> console.log(a.host); 
openid.neosmart.net 
1

私は素晴らしいマフムード・ソリューションの一般的なバージョンを書いた:

var parseUrl = (function(){ 

    var div = document.createElement('div'); 
    div.innerHTML = "<a></a>"; 

    return function(url){ 
     div.firstChild.href = url; 
     div.innerHTML = div.innerHTML; 
     return div.firstChild; 
    }; 

    })(); 

それがそのように動作します:

var url = parseUrl('http://google.com'); 
var url = zerobin.parseUrl('http://google.com'); 
console.log(url.protocol); 
"http:" 
console.log(url.host); 
"google.com" 

IEがリンクHTMLを必要とするためparseUrlコードは少し複雑ですURLを解析する場合は、そのHTMLパーサーによって処理されるコード。だから我々は<div>を子として持つ<a>を格納するクロージャを作成し(各呼び出しを再作成しないようにする)、URL解析を必要とするときには、divのHTMLを受け取り、それをIEにそれを解析する。

関連する問題