¿Cómo obtener la URL sin ningún parámetro en JavaScript?

176

Si yo uso:

alert(window.location.href);

Me sale todo, incluidas las cadenas de consulta. ¿Hay alguna manera de obtener la parte principal de la URL, por ejemplo:

http://mysite.com/somedir/somefile/

en vez de

http://mysite.com/somedir/somefile/?foo=bar&loo=goo
Tyler
fuente
posible duplicado de Eliminar cadena de consulta de URL
Alex Angas

Respuestas:

283

Esto es posible, pero tendrá que construirlo manualmente desde el locationobjeto :

location.protocol + '//' + location.host + location.pathname
solitario
fuente
14
Tenga en cuenta que no necesita proporcionar el location.protocol ya que todos los navegadores modernos (incluido IE6) heredarán automáticamente el protocolo actual. es decir:'//' + location.host + location.pathname
JonnyReeves
10
@ JonnyReeves Si lo está utilizando en el documento actual, es cierto: buen punto. Hay ocasiones en las que podría ser necesario, por ejemplo, si genera la URL como texto sin formato.
solitario
1
@lonesomeday su respuesta implica que es la única forma, que no lo es.
Oddman
55
Falta el puerto, por lo que esto devolverá un resultado incorrecto para la páginahttp://www.example.com:8080/asdf.html?foo=bar
izogfif
3
Puede guardar algunos caracteres con location.origin, lo que creo que también aborda la preocupación de @ izogfif.
Coderer
171

Cada respuesta es bastante complicada. Aquí:

var url = window.location.href.split('?')[0];

Incluso si un? no está presente, aún devolverá el primer argumento, que será su URL completa, menos la cadena de consulta.

También es independiente del protocolo, lo que significa que incluso podría usarlo para cosas como ftp, itunes.etc.

Hombre impar
fuente
39
en caso de que necesite quitar los anclajeswindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus
de hecho, cada respuesta es bastante enrevesado
mehmet
@mehmet todos los oídos si tiene un enfoque más simple :)
Oddman
1
@Oddman, absolutamente no recuerdo lo que estaba pensando en ese momento, pero supongo que podría ser una afirmación afirmativa :))
mehmet
¿Por qué es (si es) esta respuesta mejor que la marcada como aceptada?
Vishal - JAVA - CQ
16

Utilizar indexOf

var url = "http://mysite.com/somedir/somefile/?aa";

if (url.indexOf("?")>-1){
url = url.substr(0,url.indexOf("?"));
}
Niklas
fuente
5
var url = "tp://mysite.com/somedir/somefile/?foo=bar&loo=goo"    

url.substring(0,url.indexOf("?"));
Headshota
fuente
3
Esto supone que ese parámetro está definido. Mucho mejor esurl.split('?')[0]
actimel
5

Puedes usar una expresión regular: window.location.href.match(/^[^\#\?]+/)[0]

Micrófono
fuente
5

Puede concat originy pathname, si hay un puerto como example.com:80ese, también se incluirá.

location.origin + location.pathname
AamirR
fuente
2

Si mira la documentación , puede tomar solo las propiedades que le interesan del windowobjeto, es decir

protocol + '//' + hostname + pathname
planetjones
fuente