Как получить URL-адрес без каких-либо параметров в JavaScript?

Если я использую:

alert(window.location.href);

Я получаю все, включая строки запроса. Есть ли способ получить основную часть url, например:

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

вместо

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

Ответ 1

Это возможно, но вам нужно будет создать его вручную из объекта location:

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

Ответ 2

Каждый ответ довольно запутан. Здесь:

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

Даже если a? нет, он все равно вернет первый аргумент, который будет вашим полным URL-адресом, минус строка запроса.

Это также протокол-агностик, что означает, что вы даже можете использовать его для таких вещей, как ftp, itunes.etc.

Ответ 3

Используйте indexOf

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

if (url.indexOf("?")>-1){
url = url.substr(0,url.indexOf("?"));
}

Ответ 4

var url = "tp://mysite.com/somedir/somefile/?foo=bar&loo=goo"    

url.substring(0,url.indexOf("?"));

Ответ 5

Вы можете использовать регулярное выражение: window.location.href.match(/^[^\#\?]+/)[0]

Ответ 6

Если вы посмотрите документацию, вы можете взять только те объекты, которые вас интересуют, из объекта window i.e.

protocol + '//' + hostname + pathname

Ответ 7

Ответы, использующие window.location, будут работать для получения текущего URL-адреса, но не будут работать при использовании JavaScript-сервера на стороне сервера, где это окно undefined или с произвольными вводами url.

Чтобы решить эту проблему, я написал простой компонент который позволяет передавать любую строку URL-адреса. Конечно, он также будет работать на текущей странице, если вы перейдете в window.location.

Вы можете проанализировать URL-адрес в объекте с помощью метода parseUrl:

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

или

var urlObject = parseUrl(window.location);

а затем заново создайте URL-адрес, который вы хотите использовать с помощью свойств объекта:

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

Вы можете импортировать компонент и использовать его в своем проекте.

Ответ 8

Вы можете объединить origin и pathname, если есть порт, например example.com:80, который также будет включен.

location.origin + location.pathname