Existe algum método para obter o URL sem a string de consulta?


268

Eu tenho um URL como http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Eu quero começar a URL sem a string de consulta: http://localhost/dms/mduserSecurity/UIL/index.php.

Existe algum método para isso em JavaScript? Atualmente estou usando document.location.href, mas ele retorna a URL completa.


2
possível duplicado de Remover querystring da URL
Alex Angas

Respostas:


348

Tente o seguinte: window.location.href.split('?')[0]


12
@Lincoln - Por quê? Não vejo razão para isso não ser seguro. Também está dentro das especificações (as especificações de qual janela.location.href deve retornar e as especificações de como o URL funciona), para que não tenha problemas futuros. É mais fácil de ler e entender para obter um código mais limpo. É mais curto para código menor. E, por último, é menos intenso e menos complicado do que a resposta de Felix. Não estou dizendo que Felix está errado, mas estou dizendo que, sem algum tipo específico de falha / insegurança, essa resposta é superior em quase todos os aspectos.
22612 Jimbo Jonny

1
você deve usar window.location.pathname ..etc como em outras respostas
Muayyad Alsadi

22
@JimboJonny @Marcel Isso não trata de identificadores de fragmentos (por exemplo, o #termo em stackoverflow.com/questions/5817505#5817548 ). Você precisaria usar regex ou usar várias funções .split (); nesse momento, perdeu o valor de ser uma resposta "simples" ao limpar um URL. Concedido que isso está tecnicamente além do escopo da pergunta, mas eu diria que ainda é relevante.
andrewb

2
Embora seja preciso que isso não lide com identificadores de fragmentos, o solicitante não solicitou um URL completamente higienizado. Ele pediu especificamente um URL sem string de consulta, e essa resposta fornece exatamente isso. O mesmo URL, com a string de consulta removida.
Drew Major


36
location.toString().replace(location.search, "")

12
Esta é uma resposta muito subvalorizada. É o único que responde exatamente à pergunta. Opção ainda mais curta:location.href.replace(location.search, '')
Guido Bouman

2
o que dizer de lá faz parte fragmento por exemplo domain.com/?x=1#top
Onur Topal

2
Existem 10 respostas sobre esta pergunta. Apenas um deles preserva o hash ( que não existe no URL sobre o qual a pergunta está sendo feita ). Por que dois comentários apontam que essa resposta não preserva o hash inexistente, mas nenhum dos outros?
Quentin

14
var url = window.location.origin + window.location.pathname;

5
votado para baixo porque a origem não é suportada no IE11 :-(
George

6
Por que você votaria negativamente em algo apenas porque não funciona em um navegador específico? Muitos lugares ainda usam o IE10 como padrão por causa dos aplicativos que eles usam.
31416 Brad

1
Funciona em IE11.309.16299.0
Ryan Burbidge

10

Se você também deseja remover o hash, tente este: window.location.href.split(/[?#]/)[0]


5

Experimentar:

document.location.protocol + '//' +
document.location.host +
document.location.pathname;

(Nota: em .hostvez de .hostnameincluir também a porta, se necessário)



4

basta cortar a corda usando split (da maneira mais fácil):

var myString = "http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235"
var mySplitResult = myString.split("?");
alert(mySplitResult[0]);

3

Para obter todas as partes da URL, exceto a consulta:

var url = (location.origin).concat(location.pathname).concat(location.hash);

Observe que isso inclui também o hash, se houver um (sei que não há hash no URL de exemplo, mas incluí esse aspecto para fins de integridade). Para eliminar o hash, basta excluir .concat(location.hash).

É uma prática recomendada usar concata junção de cadeias Javascript (em vez de +): em algumas situações, evita problemas como confusão de tipo.



1

Aqui estão dois métodos:

<script type="text/javascript">
    var s="http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu
                                =true&pcode=1235";

    var st=s.substring(0, s.indexOf("?"));

    alert(st);

    alert(s.replace(/\?.*/,''));
</script>

1

Que tal agora: location.href.slice(0, - ((location.search + location.hash).length))


0

Basta adicionar essas duas linhas a $ (document) .ready no JS da seguinte maneira:

$(document).ready(function () {
 $("div.sidebar nav a").removeClass("active");
        $('nav a[href$="'+ window.location.pathname.split("?")[0] +'"]').addClass('active');
});

é melhor usar o cifrão ($) (terminar com)

$('nav a[href$

em vez de (^) (Comece com)

$('nav a[href^

porque, se você usar o sinal (^) e tiver URLs aninhados no menu de navegação (por exemplo, "/ conta" e "/ conta / funções")

Ele ativará os dois.


0

Se você usa o dot net core 3.1, ele suporta o caso de ignorar rota, portanto, a maneira anterior não será útil se a rota estiver em letras minúsculas e o usuário gravar a rota em letras maiúsculas.

Portanto, o código a seguir é muito útil:

$(document).ready(function () {
    $("div.sidebar nav a").removeClass("active");
    var urlPath = window.location.pathname.split("?")[0];
    var nav = $('div.sidebar nav a').filter(function () {
        return $(this).attr('href').toLowerCase().indexOf(urlPath.toLocaleLowerCase()) > -1;
    });
    $(nav).each(function () {
        if ($(this).attr("href").toLowerCase() == urlPath.toLocaleLowerCase())
            $(this).addClass('active');
    });
});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.