对于window.location,我们比较熟悉,它有protocol,hostname,host,port,search,hash,href,pathname等属性,a标签也和window.location一样,也有这样属性,这样可以方便我们分析网址,闲话少说,上代码。
1 function parseURL(url) {
2 var a = document.createElement('a');
3 a.href = url;
4 return {
5 source: url,
6 protocol: a.protocol.replace(':',''),
7 host: a.hostname,
8 port: a.port||'80',
9 query: a.search,
10 params: (function(){
11 var ret = {},
12 seg = a.search.replace(/^?/,'').split('&'),
13 len = seg.length, i = 0, s;
14 for (;i<len;i++) {
15 if (!seg[i]) { continue; }
16 s = seg[i].split('=');
17 ret[s[0]] = s[1];
18 }
19 return ret;
20 })(),
21 file: (a.pathname.match(//([^/?#]+)$/i) || [,''])[1],
22 hash: a.hash.replace('#',''),
23 path: a.pathname.replace(/^([^/])/,'/$1'),
24 relative: (a.href.match(/tps?://[^/]+(.+)/) || [,''])[1],
25 segments: a.pathname.replace(/^//,'').split('/')
26 };
27 }
测试地址
console.log(parseURL("http://www.w3school.com.cn/jsref/dom_obj_anchor.asp?type=2#id2"));
结果如下
1 {
2 file: "dom_obj_anchor.asp",
3 hash: "id2",
4 host: "www.w3school.com.cn",
5 params: {type: "2"},
6 path: "/jsref/dom_obj_anchor.asp",
7 port: "80",
8 protocol: "http",
9 query: "?type=2",
10 relative: "/jsref/dom_obj_anchor.asp?type=2#id2",
11 segments: [0: "jsref",1: "dom_obj_anchor.asp"],
12 source: "http://www.w3school.com.cn/jsref/dom_obj_anchor.asp?type=2#id2"
13 }