Esiste un metodo per ottenere l'URL senza la stringa di query?


268

Ho un URL come http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Voglio ottenere l'URL senza la stringa di query: http://localhost/dms/mduserSecurity/UIL/index.php.

Esiste un metodo per questo in JavaScript? Attualmente sto usando document.location.href, ma restituisce l'URL completo.


2
possibile duplicato di Rimuovi querystring dall'URL
Alex Angas

Risposte:


348

Prova questo: window.location.href.split('?')[0]


12
@Lincoln - Perché? Non vedo alcun motivo per cui questo non sarebbe sicuro. È anche all'interno delle specifiche (sia le specifiche per ciò che window.location.href dovrebbe restituire sia le specifiche per come funzionano gli URL), quindi non dovrebbe avere problemi futuri. È più facile da leggere e comprendere per un codice più pulito. È più breve per codice più piccolo. E infine è meno intenso e meno complicato della risposta di Felix. Non dire che Felix ha torto, ma sto dicendo che senza una sorta di esempio specifico di fallimento / insicurezza che questa risposta è superiore praticamente in ogni modo.
Jimbo Jonny,

1
dovresti usare window.location.pathname ..etc come in altre risposte
Muayyad Alsadi

22
@JimboJonny @Marcel Questo non gestisce gli identificatori di frammenti (ad es. Il #termine in stackoverflow.com/questions/5817505#5817548 ). Dovresti usare regex o utilizzare più funzioni .split (), a quel punto hai perso il valore di essere una risposta "semplice" alla pulizia di un URL. Concesso questo tecnicamente va oltre lo scopo della domanda, ma direi che è ancora rilevante.
Andrewb

2
Sebbene sia accurato che questo non gestisca identificatori di frammenti, il richiedente non ha richiesto un URL completamente sterilizzato. Ha chiesto specificamente un url senza stringa di query e questa risposta offre esattamente questo. Lo stesso URL, con la stringa di query rimossa.
Attirò il maggiore


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

12
Questa è una risposta molto sottovalutata. È l'unico che risponde esattamente alla domanda. Opzione ancora più breve:location.href.replace(location.search, '')
Guido Bouman,

2
che dire c'è una parte di frammento, ad esempio domain.com/?x=1#top
Onur Topal

2
Ci sono 10 risposte su questa domanda. Solo uno di questi conserva l'hash ( che non esiste nell'URL di cui la domanda si pone comunque ). Perché ci sono due commenti che sottolineano che questa risposta non preserva l'hash inesistente ma nessuno degli altri?
Quentin,

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

5
sotto votato perché l'origine non è supportata in IE11 :-(
George,

6
Perché sottovaluteresti qualcosa solo perché non funziona in un determinato browser? Un sacco di posti usano ancora IE10 come standard a causa delle applicazioni che usano.
Brad

1
Funziona in IE11.309.16299.0
Ryan Burbidge il

10

Se vuoi rimuovere anche l'hash, prova questo: window.location.href.split(/[?#]/)[0]


5

Provare:

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

(NB: .hostpiuttosto che in .hostnamemodo da includere anche la porta, se necessario)



4

basta tagliare la corda usando split (il modo più semplice):

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

3

Per ottenere ogni parte dell'URL ad eccezione della query:

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

Nota che questo include anche l'hash, se ce n'è uno (sono consapevole che non c'è hash nel tuo URL di esempio, ma ho incluso quell'aspetto per completezza). Per eliminare l'hash, è sufficiente escludere .concat(location.hash).

È meglio usare concatper unire le stringhe Javascript (piuttosto che +): in alcune situazioni evita problemi come la confusione dei tipi.



1

Ecco due metodi:

<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

Cosa ne pensi di questo: location.href.slice(0, - ((location.search + location.hash).length))


0

Aggiungi queste due righe a $ (documento). Già in JS come segue:

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

è meglio usare il simbolo del dollaro ($) (Termina con)

$('nav a[href$

anziché (^) (Inizia con)

$('nav a[href^

perché, se usi il segno (^) e hai degli URL nidificati nel menu di navigazione, (ad es. "/ account" e "/ account / ruoli")

Attiverà entrambi.


0

Se si utilizza dot net core 3.1, supporta case ignora route, quindi il modo precedente non è utile se la rotta è in lettere minuscole e l'utente scrive la rotta in maiuscolo.

Quindi, il seguente codice è molto utile:

$(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');
    });
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.