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.