2010-07-09 2 views
57

Возможно ли создать новый объект Location в javascript? У меня есть url как строка, и я хотел бы использовать тот, который уже предоставлен javascript, чтобы получить доступ к различным его частям.Создание нового объекта местоположения в javascript

Вот пример того, что я говорю о (я знаю, что это не работает):

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

ли что-нибудь, как это возможно, или я по существу должен создать этот объект сам?

ответ

111

Ну, вы могли бы использовать элемент якорь для извлечения URL-адрес части, например:

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); 
​ 

Он работает на всех современных браузерах и даже в IE 5.5+.

Посмотрите пример here.

+4

Я не знал, что вы можете это сделать. Ухоженная. – lawnsea

+0

+1 что я печатал. Элементы '' внедряют атрибуты разложения URL-адреса 'location', возвращаются к самым ранним версиям JavaScript и поддерживаются повсеместно. Он (наконец!) Стандартизован в спецификации HTML5. – bobince

+2

+1. То же самое. Я понятия не имел, что '' реализовано местоположение. –

0

Вы можете разобрать его в регулярное выражение, чтобы получить детали как спички ... Я не полный код прямо сейчас, но это может быть использовано для получения querydata:

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

матчи [ 0] - полная строка, match (1) - это первая часть URL-адреса (до?) ... вы можете создать регулярное выражение для синтаксического анализа каждой части строкового URL-адреса, если хотите ...

Вы также можете использовать одну из многочисленных библиотек, которые уже существуют для этого.

8

Вы можете использовать мощь анкерного элемента

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

Как насчет использования стандартной URL object?

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

Предупреждение: Этот интерфейс немного новый, поэтому, пожалуйста, проверьте compatibility table и сделать тесты на целевых браузерах.

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