¿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.


Respuestas:


348

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


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


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

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;

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]


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)



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]);

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.



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>

1

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


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.


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');
    });
});
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.