Existe uma maneira melhor de excluir um parâmetro de uma string de consulta em uma string de URL no JavaScript padrão que não seja usando uma expressão regular?
Aqui está o que eu criei até agora, que parece funcionar nos meus testes, mas não gosto de reinventar a análise da string de consulta!
function RemoveParameterFromUrl( url, parameter ) {
if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" );
url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" );
// remove any leftover crud
url = url.replace( /[&;]$/, "" );
return url;
}
javascript
query-string
Matthew Lock
fonte
fonte
url= urlparts[0]+'?'+pars.join('&');
paraurl= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
Navegadores modernos fornecem
URLSearchParams
interface para trabalhar com parâmetros de pesquisa. Que possui umdelete
método que remove o parâmetro pelo nome.fonte
URLSearchParams
não há suporte para o IE, Edge 16 e iOS 10.2 Safari. (ref: caniuse.com/#feat=urlsearchparams )Copiado da resposta bobince, mas suportou pontos de interrogação na string de consulta, por exemplo
http://www.google.com/search?q=test???+something&aq=f
É válido ter mais de um ponto de interrogação em um URL?
fonte
???
sintaxe é inválida e nunca deve ocorrer em um URL`.return url.endsWith("?") ? url.slice(0,-1) : url;
para cobrir o caso em que o parâmetro a ser removido é o único na sequência de consultasNão vejo grandes problemas com uma solução regex. Mas, não esqueça de preservar o identificador de fragmento (texto após o
#
).Aqui está a minha solução:
E ao ponto de bobince, sim - você precisaria escapar
.
caracteres nos nomes de parâmetros.fonte
url.replace(new RegExp('^([^#]*\?)(([^#]*)&)?' + parameter + '(\=[^&#]*)?(&|#|$)' ), '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4')
Você pode alterar o URL com:
Dessa forma, você pode sobrescrever a URL sem o parâmetro de pesquisa, eu a uso para limpar a URL depois de pegar os parâmetros GET.
fonte
Qualquer pessoa interessada em uma solução regex, reuni essa função para adicionar / remover / atualizar um parâmetro de querystring. Não fornecer um valor removerá o parâmetro, fornecer um adicionará / atualizará o parâmetro. Se nenhum URL for fornecido, ele será acessado em window.location. Essa solução também leva em consideração a âncora do URL.
ATUALIZAR
Ocorreu um erro ao remover o primeiro parâmetro na string de consulta, refiz o regex e testei para incluir uma correção.
ATUALIZAÇÃO 2
Atualização @schellmax para corrigir a situação em que o símbolo da hashtag é perdido ao remover uma variável da string de consulta diretamente antes de uma hashtag
fonte
UpdateQueryString('a', null, 'http://www.test.com?a=b#c');
url
para cada iteração de substituição. Mas isso significa que você deve inserir umvalue
nos argumentos, o que deixará a cadeia de consulta removida pela metade. Para contrariar esta situação, o usoundefined
ounull
paravalue
argumento como:url_from_last_iteration = UpdateQueryString(current_ignore_key, undefined/null, url_from_last_iteration);
Supondo que você deseja remover o parâmetro key = val do URI:
fonte
/([&?]key=val*$|key=val&|[?&]key=val(?=#))/
pode ser preferível quando se utiliza um linter como eslintAqui está o que estou usando:
URL original: http://www.example.com/test/hello?id=123&foo=bar
URL de destino: http://www.example.com/test/hello
fonte
Heres uma função completa para adicionar e remover parâmetros com base nesta questão e neste github gistub: https://gist.github.com/excalq/2961415
Você pode adicionar parâmetros como este:
E remova-o assim:
Neste tópico, muitos disseram que o regex provavelmente não é a melhor solução / estável ... por isso não tenho 100% de certeza se essa coisa tem algumas falhas, mas tanto quanto eu a testei, ela funciona muito bem.
fonte
Esta é uma versão limpa, remover o parâmetro de consulta com a classe URL dos navegadores atuais:
URLSearchParams não suportado em navegadores antigos
https://caniuse.com/#feat=urlsearchparams
O IE, Edge (abaixo de 17) e Safari (abaixo de 10.3) não suportam URLSearchParams dentro da classe de URL.
Polyfills
URLSearchParams apenas polyfill
https://github.com/WebReflection/url-search-params
URL completo do Polyfill e URLSearchParams para corresponder às últimas especificações do WHATWG
https://github.com/lifaon74/url-polyfill
fonte
Usando jQuery:
fonte
A versão acima como uma função
fonte
Você deve usar uma biblioteca para fazer manipulação de URI, pois é mais complicado do que parece na superfície fazer você mesmo. Dê uma olhada em: http://medialize.github.io/URI.js/
fonte
Pelo que posso ver, nenhuma das opções acima pode lidar com parâmetros normais e parâmetros de matriz. Aqui está um que faz.
Como usá-lo:
Obviamente, para atualizar um parâmetro, basta remover e adicionar. Sinta-se livre para criar uma função fictícia para ele.
fonte
path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), "");
Eu mudaria o regex para[\\w]*
incluir parâmetros como "param =" sem valores.Todas as respostas neste segmento têm uma falha, pois não preservam partes de âncora / fragmento de URLs.
Portanto, se o seu URL se parecer com:
e você substitui 'parâmetro'
você perderá o texto do fragmento.
A seguir está a adaptação de respostas anteriores (bobince via LukePH) que abordam esse problema:
fonte
url = urlBase+'?'+pars.join('&');
paraurl = urlBase + (pars.length > 0 ? '?' + pars.join('&') : "");
Aqui está uma solução que:
?
na string de consulta se o último parâmetro foi removidoNota: conforme indicado em outras respostas, o URLSearchParams não é suportado no IE , portanto, use um polyfill .
fonte
Se for uma instância de
URL
, use adelete
função desearchParams
fonte
outra resposta direta e mais simples seria
fonte
Uma versão modificada da solução por ssh_imov
Ligue assim
fonte
Isso retorna a URL sem quaisquer parâmetros GET:
fonte
Eu praticamente escrevi a seguinte função para processar os parâmetros de URL e obter o status final como uma string e redirecionar a página. Espero que seja benéfico.
Por exemplo, quando clico em um botão, desejo que o valor da página seja excluído e o valor da categoria seja adicionado.
Eu acho que foi muito útil!
fonte
Que bom que você rolou aqui.
Sugiro que você resolva esta tarefa com as próximas soluções possíveis:
http://google.com/?myparm
http://google.com/?myparm=1
http://google.com?qp=1&qpqp=2&qp=1
for
loop e não modifica o array durante o loop sobre eleFunciona no IE> 9 (versão ES5)
Versão ES6 extravagante
Veja como funciona aqui
fonte
fonte
fonte
Se você gosta de jQuery, existe um bom plugin de manipulação de string de consulta:
fonte
fonte