2010-07-09 7 views
57

Czy jest możliwe utworzenie nowego obiektu lokalizacji w javascript? Mam adres URL jako ciąg znaków i chciałbym wykorzystać to, co javascript już zapewnia, aby uzyskać dostęp do różnych jego części.Tworzenie nowego obiektu lokalizacji w javascript

Oto przykład tego, co mówię (wiem, że to nie działa):

var url = new window.location("http://www.example.com/some/path?name=value#anchor"); 
var protocol = url.protocol; 
var hash = url.hash; 
// etc etc 

Czy coś jak to możliwe, czy bym zasadniczo trzeba utworzyć ten sam obiekt?

Odpowiedz

111

Cóż, można zastosować element kontrolny, aby wyodrębnić części zawartości, na przykład:

var url = document.createElement('a'); 
url.href = "http://www.example.com/some/path?name=value#anchor"; 
var protocol = url.protocol; 
var hash = url.hash; 

alert('protocol: ' + protocol); 
alert('hash: ' + hash); 
​ 

To działa na wszystkich nowoczesnych przeglądarkach, a nawet na IE 5.5+.

Sprawdź przykład here.

+4

Nie wiedziałem, że możesz to zrobić. Schludny. – lawnsea

+2

+1. Tak samo. Nie miałem pojęcia, że ​​'' zaimplementowałem lokalizację '' '. –

0

można analizować je w regex, aby uzyskać części jak pasuje ... Nie mam pełny kod teraz, ale to może być wykorzystane w celu uzyskania querydata:

var myUrl = window.location.href; 
var matches = myUrl.match(/([^\?]+)\?(.+)/); 
var queryData = matches[2]; 

matches [ 0] jest pełnym ciągiem znaków, dopasowania (1) to pierwsza część adresu URL (aż do?) ... możesz utworzyć wyrażenie regularne, aby przeanalizować każdą część adresu URL, jeśli chcesz ...

Możesz także skorzystać z jednej z wielu bibliotek już dostępnych.

8

Można wykorzystać moc elementu zakotwiczenia

var aLink = document.createElement("a"); 
aLink.href="http://www.example.com/foo/bar.html?q=123#asdf"; 
alert(aLink.pathname); 
16

Jak o użyciu średnia URL object?

var url = new URL("http://www.example.com/some/path?name=value#anchor"); 
var protocol = url.protocol; 
var hash = url.hash; 

Warning: Ten interfejs jest nieco nowy, więc proszę sprawdzić compatibility table i robić swoje testy w przeglądarkach docelowych.

Powiązane problemy