Os parâmetros de string de consulta têm sido incrivelmente úteis no lado do servidor desde que a Internet decolou,
mas foi somente quando os aplicativos da Web orientados por AJAX se tornaram populares que passamos a confiar demais neles no lado do cliente;
Não apenas pegamos os valores dos parâmetros, mas também os modificamos dinamicamente com a função History
API,
portanto, esses parâmetros desempenham um papel importante fora do carregamento inicial da página.
Sempre conseguimos obter a string de consulta completa por meio do window.location.search
propriedade:
console.log(window.location.search); // "?post=1234&action=edit"
…mas em um mundo de setters, getters e JSON, deve haver uma maneira melhor de obter valores do que analisar uma string, certo?
Depois de anos de análise feia de strings, há uma maneira melhor: URLSearchParams
Vamos dar uma olhada em como podemos
usar essa nova API para obter valores do local!
// Assuming "?post=1234&action=edit" var urlParams = new URLSearchParams(window.location.search); console.log(urlParams.has('post')); // true console.log(urlParams.get('action')); // "edit" console.log(urlParams.getAll('action')); // ["edit"] console.log(urlParams.toString()); // "?post=1234&action=edit" console.log(urlParams.append('active', '1')); // "?post=1234&action=edit&active=1"
URLSearchParams
também fornece informações familiares ao Object
como o keys()
, values()
,
e entries()
:
var keys = urlParams.keys(); for(key of keys) { console.log(key); } // post // action var entries = urlParams.entries(); for(pair of entries) { console.log(pair[0], pair[1]); }
URLSearchParams
me lembra muito o
classList
API — métodos muito simples, mas
muito úteis
JavaScript Fallback
Enquanto URLSearchParams
seja ideal, nem todos os navegadores são compatíveis com essa API. Existe uma polyfill disponível mas se o senhor quiser uma função minúscula para analisar a string de consulta básica, o seguinte é uma função roubada do kit de ferramentas A-Frame VR que analisa a string de consulta para obter o valor da chave que o senhor deseja:
function getUrlParameter(name) { name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); var results = regex.exec(location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); };
Com a função acima, o senhor pode obter valores de parâmetros individuais:
getUrlParameter('post'); // "1234" getUrlParameter('action'); // "edit"
De qualquer forma, aproveite essa função – o senhor vai acabar precisando dela mais do que imagina!