如何在JavaScript中没有任何参数的URL?

如果我使用:

alert(window.location.href); 

我得到一切,包括查询string。 有没有办法只是得到主要的url部分,例如:

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

代替

 http://mysite.com/somedir/somefile/?foo=bar&loo=goo 

这是可能的,但你必须从location对象手动build立它:

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

每个答案都相当复杂。 这里:

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

即使是一个? 不存在,它仍然会返回第一个参数,这将是您的完整URL,减去查询string。

这也是协议不可知的,这意味着你甚至可以将它用于诸如ftp,itunes.etc之类的东西。

使用indexOf

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

您可以使用正则expression式: window.location.href.match(/^[^\#\?]+/)[0]

如果你看一下文档,你可以从window对象中获取你感兴趣的属性

 protocol + '//' + hostname + pathname 

使用window.location的答案将获得当前的url,但不会工作时使用服务器端的JavaScript,其中窗口是未定义的或任意的urlinput。

为了解决这个问题,我写了一个简单的组件 ,允许你传入任何urlstring。 当然,如果你传入window.location,它也会在当前页面上工作。

您可以使用parseUrl方法将urlparsing为对象:

 var urlObject = parseUrl('http://example.com/somedir/somefile/?foo=bar&loo=goo'); 

要么

 var urlObject = parseUrl(window.location); 

然后使用该对象的属性重新创build所需的url:

 var newUrl = urlObject.protocol + '//' + urlObject.hostname + urlObject.path; 

欢迎您导入组件并将其用于您的项目中。