从URL获取协议,域和端口

我需要从给定的URL中提取完整的协议,域和端口。 例如:

https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181

首先得到当前地址

var url = window.location.href

然后解析该字符串

var arr = url.split("/");

你的网址是:

var result = arr[0] + "//" + arr[2]

希望这可以帮助


var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');

这些答案似乎都没有完全解决这个问题,这个问题需要一个任意的url,而不是专门的当前页面的url。

方法1:使用URL API(警告:不支持IE11)

您可以使用URL API(不受IE11支持,但在其他地方可用)。

这也使得访问搜索参数变得很容易。 另一个好处是:它可以在Web Worker中使用,因为它不依赖于DOM。

const url = new URL('http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');

方法2(旧方法):在DOM中使用浏览器的内置解析器

如果您需要此功能也可以在旧版浏览器上使用,请使用此功能。

//  Create an anchor element (note: no need to append this element to the document)
const url = document.createElement('a');
//  Set href to any path
url.setAttribute('href', 'http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');

而已!

浏览器的内置解析器已经完成了它的工作。 现在你可以抓住你需要的部分(注意,这对于上述两种方法都适用):

//  Get any piece of the url you're interested in
url.hostname;  //  'example.com'
url.port;      //  12345
url.search;    //  '?startIndex=1&pageSize=10'
url.pathname;  //  '/blog/foo/bar'
url.protocol;  //  'http:'

奖金:搜索参数

因为'?startIndex = 1&pageSize = 10'本身不太可用,所以你可能会想要分割搜索url params。

如果您使用上面的方法1(URL API),则只需使用searchParams getters:

url.searchParams.get('searchIndex');  // '1'

或者获取所有参数:

Array.from(url.searchParams).reduce((accum, [key, val]) => {
  accum[key] = val;
  return accum;
}, {});
// -> { startIndex: '1', pageSize: '10' }

如果你使用方法2(旧方法),你可以使用这样的东西:

// Simple object output (note: does NOT preserve duplicate keys).
var parms = url.search.substr(1); // remove '?' prefix
params.split('&').reduce((accum, keyval) => {
  const [key, val] = keyval.split('=');
  accum[key] = val;
  return accum;
}, {});
// -> { startIndex: '1', pageSize: '10' }
链接地址: http://www.djcxy.com/p/3847.html

上一篇: Get protocol, domain, and port from URL

下一篇: How can I download a new remote branch without merging?