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.

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

Respostas:

348

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

tradyblix
fonte
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
383

Leia sobre Window.locatione a Locationinterface:

var url = [location.protocol, '//', location.host, location.pathname].join('');
Felix Kling
fonte
27
Ou se estiver usando ES6 você pode usar um literal de cadeia ${location.protocol}//${location.host}${location.pathname}
alexreardon
Embora note que pathnamepode cair a liderança /(até o IE 11?) . Ah, ou seja, sempre um floco de neve, não é?
ruffin 28/01
36
location.toString().replace(location.search, "")
Quentin
fonte
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;
Jason
fonte
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]

user1079877
fonte
5

Experimentar:

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

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

Alnitak
fonte
5

Aqui está uma abordagem usando a interface URL () :

new URL(location.pathname, location.href).href
s4y
fonte
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]);
satisfeito
fonte
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.

Andrew Faulkner
fonte
1

Use propriedades de window.location

var loc = window.location;
var withoutQuery = loc.hostname + loc.pathname;
var includingProtocol = loc.protocol + "//" + loc.hostname + loc.pathname;

Você pode ver mais propriedades em https://developer.mozilla.org/en/DOM/window.location

detaylor
fonte
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>
TheVillageIdiot
fonte
1

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

LI XiangChen
fonte
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.

i Aprendizado inteligente
fonte
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');
    });
});
i Aprendizado inteligente
fonte