Pergunta

É possível criar um novo objeto Location em javascript?Eu tenho um URL como string e gostaria de aproveitar o que o javascript já fornece para obter acesso às diferentes partes dele.

Aqui está um exemplo do que estou falando (sei que isso não funciona):

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

Algo assim é possível ou eu teria que criar esse objeto sozinho?

Foi útil?

Solução

Bem, você poderia usar um elemento âncora para extrair as partes do URL, por exemplo:

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

Funciona em todos os navegadores modernos e até mesmo no IE 5.5+.

Confira um exemplo aqui.

Outras dicas

Que tal usar o padrão Objeto URL?

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

Aviso:Esta interface é um pouco nova, então, se você não estiver usando um transpilador, Por favor, cheque o tabela de compatibilidade e faça seus testes nos navegadores de destino.

Você pode aproveitar o poder de um elemento âncora

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

Você pode analisá-lo em um regex para obter as partes como correspondências...Não tenho o código completo no momento, mas ele pode ser usado para obter os dados da consulta:

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

matches[0] é a string completa, matches(1) é a primeira parte da URL (até ?)...você pode criar uma expressão regular para analisar cada parte de um URL de string, se quiser ...

Você também pode usar uma das muitas bibliotecas já existentes para isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top