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!