Eu tenho uma URL com alguns parâmetros GET da seguinte maneira:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Eu preciso obter todo o valor de c
. Tentei ler o URL, mas consegui apenas m2
. Como faço isso usando JavaScript?
Eu tenho uma URL com alguns parâmetros GET da seguinte maneira:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Eu preciso obter todo o valor de c
. Tentei ler o URL, mas consegui apenas m2
. Como faço isso usando JavaScript?
Respostas:
O próprio JavaScript não possui nada embutido para manipular parâmetros de cadeia de consulta.
Código em execução em um navegador (moderno), você pode usar o
URL
objeto (que faz parte das APIs fornecidas pelos navegadores para JS):Para navegadores mais antigos (incluindo o Internet Explorer), você pode usar este polyfill ou o código da versão original desta resposta anterior
URL
:Você poderia acessar
location.search
, o que forneceria do?
caractere até o final da URL ou o início do identificador de fragmento (#foo), o que ocorrer primeiro.Então você pode analisá-lo com isso:
Você pode obter a string de consulta no URL da página atual com:
fonte
URL
além daqueleURLSearchParams
. Ou você pode evitar esse problema substituindo a linhavar c = url.searchParams.get("c");
na resposta acima porvar c = new URLSearchParams(window.location.search).get("c");
.new URL()
espera receber um URL codificado corretamente como argumento.decodeURIComponent
espera receber um componente de um URL, não um URL inteiro.decodeURIComponent
não deve ser usado neste casoparse_query_string
função faz uma decodificação dupla devalue
. A=
emissão mencionada por @ManelClos pode ser resolvida adicionando um segundo parâmetro2
(limit
) avars[i].split()
.A maioria das implementações que vi perder a decodificação de URL dos nomes e valores.
Aqui está uma função de utilitário geral que também faz decodificação de URL adequada:
fonte
qs.split('+').join(' ');
e nãoqs.replace(/\+/g, ' ');
?fonte
fonte
Essa é uma maneira fácil de verificar apenas um parâmetro:
URL de exemplo:
Exemplo de Javascript:
se "myParam" existir no URL ... a variável myParam conterá "2", caso contrário, será indefinida.
Talvez você queira um valor padrão, nesse caso:
Atualização: Isso funciona melhor:
E funciona bem mesmo quando o URL está cheio de parâmetros.
fonte
http://myserver/action?myParam=2&anotherParam=3
, não produziria"2"
mas"2&anotherParam=3"
.(location.search.split('myParam=')[1]||'').split('&')[0]
- para usar com vários parâmetros ou possivelmente desaparecermyParam
.location.search.split('myParam=').splice(1).join('').split('&')[0]
[?|&]
como[?|&]myParam=([^&]+)
result = decodeURIComponent(result);
Os fornecedores de navegadores implementaram uma maneira nativa de fazer isso via URL e URLSearchParams.
Atualmente suportado no Firefox, Opera, Safari, Chrome e Edge. Para uma lista de suporte ao navegador, clique aqui .
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL
https://url.spec.whatwg.org/
Eric Bidelman, engenheiro do Google, recomenda o uso deste polyfill para navegadores não suportados.
fonte
new URLSearchParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5").get('a')
voltandonull
para mim? (No Chrome estável).b
ec
parece funcionar bem.url.searchParams
vez dissonew URLSearchParams(url.search)
.Achei isso há muito tempo, muito fácil:
Então chame assim:
fonte
decodeURIComponent()
no valor, porque é com isso que você costuma trabalhar; use emwindow.location.search
vez dewindow.location.href
, porque você está interessado apenas nos parâmetros, não no URL inteiro.var vars = {}; window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars;
Você pode inserir a string de consulta
location.search
e dividir tudo após o ponto de interrogação:fonte
?array[]=1&array[]=2
produz{"array[]": "2"}
, o que está claramente errado.[]
padrão só tem significado em alguns casos (por exemplo, PHP), mas não em outros. Portanto, não "claramente errado" - apenas não implementado para lidar com um caso não padrão que você pode ou não precisar.Eu escrevi uma solução mais simples e elegante.
fonte
[0-9]
por\d
Uma maneira super simples de usar o URLSearchParams .
Atualmente, ele é suportado no Chrome, Firefox, Safari, Edge e outros .
fonte
Aqui está uma solução recursiva que não possui regex e tem uma mutação mínima (apenas o objeto params está mutado, o que acredito ser inevitável em JS).
É incrível porque:
Código:
fonte
Eu fiz uma função que faz isso:
Atualização 26/05/2017, aqui está uma implementação do ES7 (executada com o estágio 0, 1, 2 ou 3 do babel preset):
Alguns testes:
Atualização 26/26/2018, aqui está uma implementação do Typecript:
Atualização 13/02/2019, aqui está uma implementação TypeScript atualizada que funciona com o TypeScript 3.
fonte
Object {"": ""}
Veja isso
fonte
Solução ECMAScript 6:
fonte
function urlParams(url) { const [, searchParams = ''] = url.split('?') return searchParams.split('&') .map(v => v.split('=')) .reduce((map, [key = '', value]) => key.length ? map.set(key, decodeURIComponent(value)) : map, new Map())
}eu uso
fonte
window.location.search
não inclui hash like#id
.location.href
corresponder ao resultado, em vez delocation.search
.Obrigado.Eu uso a biblioteca parseUri . Ele permite que você faça exatamente o que está solicitando:
fonte
Aqui está a minha solução. Conforme recomendado por Andy E ao responder a essa pergunta , não é bom para o desempenho do seu script se ele estiver criando repetidamente várias seqüências de caracteres de expressões regulares, executando loops etc. apenas para obter um valor único. Então, eu vim com um script mais simples que retorna todos os parâmetros GET em um único objeto. Você deve chamá-lo apenas uma vez, atribuir o resultado a uma variável e, a qualquer momento no futuro, obter qualquer valor desejado dessa variável usando a chave apropriada. Observe que ele também cuida da decodificação de URI (ou seja, coisas como% 20) e substitui + por um espaço:
Então, aqui estão alguns testes do script para você ver:
fonte
Ou, se você não deseja reinventar a roda de análise do URI, use URI.js
Para obter o valor de um parâmetro chamado foo:
O que isso faz é
(passar true diz a ele para gerar um objeto)
Aqui está um violino para isso .... http://jsfiddle.net/m6tett01/12/
fonte
Para um valor de parâmetro único como este index.html? Msg = 1 use o seguinte código,
Para Todo o valor do parâmetro, use o seguinte código,
fonte
Aqui estou postando um exemplo. Mas está no jQuery. Espero que ajude os outros:
fonte
O caminho mais curto:
fonte
new URL(location.href).searchParams.get("my_key")
excessivo,URLSearchParams
pois o último falhará ao recuperar o primeiro parâmetro de consulta de qualquer URL.esta pergunta tem muitas respostas, então estou adicionando outra.
uso:
isso lida com parâmetros vazios (aquelas chaves presentes sem
"=value"
), a exposição de uma API de recuperação de valor escalar e baseada em matriz, bem como a decodificação adequada de componentes de URI.fonte
A maneira mais fácil de usar o
replace()
método:Da
urlStr
sequência:ou a partir do URL atual :
Explicação:
document.URL
- interface retorna o local do documento (URL da página) como uma sequência.replace()
- método retorna uma nova string com algumas ou todas as correspondências de um padrão substituídas por uma substituição ./.*param_name=([^&]*).*/
- o padrão de expressão regular entre barras, o que significa:.*
- zero ou mais caracteres,param_name=
- nome do param que é buscado,()
- grupo em expressão regular,[^&]*
- um ou mais caracteres excluindo&
,|
- alternância,$1
- referência ao primeiro grupo em expressão regular.fonte
Mais uma sugestão.
Já existem boas respostas, mas eu as achei desnecessariamente complexas e difíceis de entender. É curto, simples e retorna uma matriz associativa simples com nomes de chave correspondentes aos nomes de token no URL.
Eu adicionei uma versão com comentários abaixo para quem quer aprender.
Observe que isso depende do jQuery ($ .each) para seu loop, que eu recomendo em vez do forEach. Acho mais simples garantir a compatibilidade entre navegadores usando o jQuery em geral, em vez de conectar correções individuais para dar suporte a quaisquer novas funções que não sejam suportadas em navegadores antigos.
Edit: Depois que escrevi isso, notei a resposta de Eric Elliott, que é quase a mesma, embora use forEach, enquanto geralmente sou contra (pelas razões expostas acima).
Versão comentada:
Para os exemplos abaixo, assumiremos este endereço:
Você pode atribuir os tokens de URL à sua própria variável:
Em seguida, consulte cada token de URL por nome como este:
Isso imprimiria "4".
Você também pode simplesmente se referir a um nome de token diretamente da função:
... que imprimiria "murray".
fonte
Obtido a partir daqui: http://jquery-howto.blogspot.ru/2009/09/get-url-parameters-values-with-jquery.html
fonte
Maneira simples
então chame-o como getParams (url)
fonte
Eu tive a necessidade de ler uma variável URL GET e concluir uma ação com base no parâmetro url. Eu procurei alto e baixo para uma solução e me deparei com este pequeno pedaço de código. Ele basicamente lê o URL da página atual, executa alguma expressão regular no URL e salva os parâmetros do URL em uma matriz associativa, à qual podemos acessar facilmente.
Por exemplo, se tivéssemos o seguinte URL com o javascript na parte inferior no lugar.
Tudo o que precisamos fazer para obter a identificação dos parâmetros e a página é chamar isso:
O código será:
fonte
fonte
Este Gist de Eldon McGuinness é de longe a implementação mais completa de um analisador de string de consulta JavaScript que eu vi até agora.
Infelizmente, está escrito como um plugin jQuery.
Eu o reescrevi para o vanilla JS e fiz algumas melhorias:
Veja também este violino .
fonte
Solução elegante e funcional
Vamos criar um objeto contendo nomes de parâmetros de URL como chaves, para que possamos extrair facilmente o parâmetro por seu nome:
fonte
return
Aqui está o que eu faço:
fonte