¿Hay algún método para obtener la URL sin una cadena de consulta?

268

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

Quiero obtener la URL sin la cadena de consulta: http://localhost/dms/mduserSecurity/UIL/index.php.

¿Hay algún método para esto en JavaScript? Actualmente estoy usando document.location.href, pero devuelve la URL completa.

Santo
fuente
2
posible duplicado de Eliminar cadena de consulta de URL
Alex Angas

Respuestas:

348

Prueba esto: window.location.href.split('?')[0]

tradyblix
fuente
12
@ Lincoln - ¿Por qué? No veo ninguna razón para que esto sea inseguro. También está dentro de las especificaciones (tanto las especificaciones de qué window.location.href debería devolver como las especificaciones de cómo funcionan las URL), por lo que no debería tener ningún problema futuro. Es más fácil de leer y entender para un código más limpio. Es más corto para código más pequeño. Y, por último, es menos intenso y menos complicado que la respuesta de Félix. No digo que Felix esté equivocado, pero digo que sin algún tipo de ejemplo específico de falla / inseguridad, esta respuesta es superior en casi todos los sentidos.
Jimbo Jonny
1
deberías usar window.location.pathname ..etc como en otras respuestas
Muayyad Alsadi
22
@JimboJonny @Marcel Esto no maneja identificadores de fragmentos (por ejemplo, el #término en stackoverflow.com/questions/5817505#5817548 ). Tendría que usar expresiones regulares o múltiples funciones .split (), en cuyo punto habrá perdido el valor de ser una respuesta "simple" al limpiar una URL. Es cierto que esto está técnicamente más allá del alcance de la pregunta, pero yo diría que sigue siendo relevante.
andrewb
2
Si bien es cierto que esto no maneja identificadores de fragmentos, el autor de la pregunta no solicitó una URL completamente desinfectada. Pidió específicamente una url sin cadena de consulta, y esta respuesta ofrece exactamente eso. La misma URL, con la cadena de consulta eliminada.
Dibujó Mayor
383

Lea sobre Window.locationy la Locationinterfaz:

var url = [location.protocol, '//', location.host, location.pathname].join('');
Felix Kling
fuente
27
O si usa es6 puede usar un literal de cadena ${location.protocol}//${location.host}${location.pathname}
alexreardon
Sin embargo, tenga en cuenta que pathnamepuede caer el inicio /(hasta IE 11?) . Ah, IE, siempre un copo de nieve, ¿no?
Ruffin
36
location.toString().replace(location.search, "")
Quentin
fuente
12
Esta es una respuesta muy infravalorada. Es el único que responde exactamente la pregunta. Opción aún más corta:location.href.replace(location.search, '')
Guido Bouman el
2
¿qué pasa con la parte del fragmento, por ejemplo, dominio.com/?x=1#top
Onur Topal
2
Hay 10 respuestas sobre esta pregunta. Solo uno de ellos conserva el hash ( que de todos modos no existe en la URL de la pregunta ). ¿Por qué hay dos comentarios que señalan que esta respuesta no preserva el hash inexistente pero ninguno de los otros?
Quentin
14
var url = window.location.origin + window.location.pathname;
Jason
fuente
55
rechazado porque el origen no es compatible con IE11 :-(
George
66
¿Por qué rechazarías algo solo porque no funciona en un navegador en particular? Muchos lugares todavía usan IE10 como estándar debido a las aplicaciones que usan.
Brad
1
Funciona en IE11.309.16299.0
Ryan Burbidge
10

Si también quieres eliminar el hash, prueba este: window.location.href.split(/[?#]/)[0]

usuario1079877
fuente
5

Tratar:

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

(Nota: en .hostlugar de .hostnameque el puerto se incluya también, si es necesario)

Alnitak
fuente
5

Aquí hay un enfoque utilizando la interfaz URL () :

new URL(location.pathname, location.href).href
s4y
fuente
4

solo corta la cuerda usando split (la manera fácil):

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

Para obtener cada parte de la URL, excepto la consulta:

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

Tenga en cuenta que esto también incluye el hash, si hay uno (estoy consciente de que no hay hash en su URL de ejemplo, pero incluí ese aspecto para completarlo). Para eliminar el hash, simplemente excluya.concat(location.hash) .

Es mejor usar concatpara unir cadenas de JavaScript (en lugar de +): en algunas situaciones, evita problemas como la confusión de tipos.

Andrew Faulkner
fuente
1

Aquí hay dos 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>
TheIdiot de la aldea
fuente
1

Qué tal esto: location.href.slice(0, - ((location.search + location.hash).length))

LI XiangChen
fuente
0

Simplemente agregue estas dos líneas a $ (document) .ready en JS de la siguiente manera:

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

es mejor usar el signo de dólar ($) (terminar con)

$('nav a[href$

en lugar de (^) (Comience con)

$('nav a[href^

porque, si usa el signo (^) y tiene URL anidadas en el menú de navegación (por ejemplo, "/ cuenta" y "/ cuenta / roles")

Los activará a ambos.

i Aprendizaje inteligente
fuente
0

Si utiliza dot net core 3.1, admite ignorar mayúsculas y minúsculas ruta de , por lo que la forma anterior no es útil si la ruta está en letras minúsculas y el usuario escribe la ruta en letras mayúsculas.

Entonces, el siguiente código es muy ú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 Aprendizaje inteligente
fuente