博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS URL工具类
阅读量:6421 次
发布时间:2019-06-23

本文共 2990 字,大约阅读时间需要 9 分钟。

URL即:统一资源定位符 (Uniform Resource Locator, URL) 

完整的URL由这几个部分构成:
scheme://host:port/path?query#fragment 
scheme:通信协议
常用的http,ftp,maito等
host:主机
服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。
port:端口号
整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
path:路径
由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
query:查询
可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用"&"符号隔开,每个参数的名和值用"="符号隔开。
fragment:信息片断
字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。(也称为锚点.)
对于这样一个URL
http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere
我们可以用获得其中的各个部分
1, window.location.href
整个URl字符串(在浏览器中就是完整的地址栏)
本例返回值: http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere
2,window.location.protocol
URL 的协议部分
本例返回值:http:
3,window.location.host
URL 的主机部分
本例返回值:www.x2y2.com
4,window.location.port
URL 的端口部分
如果采用默认的80端口(update:即使添加了:80),那么返回值并不是默认的80而是空字符
本例返回值:""
5,window.location.pathname
URL 的路径部分(就是文件地址)
本例返回值:/fisker/post/0703/window.location.html
6,window.location.search 
查询(参数)部分
除了给动态语言赋值以外,我们同样可以给静态页面,并使用javascript来获得相信应的参数值
本例返回值:?ver=1.0&id=6
7,window.location.hash
锚点
本例返回值:#imhere

 

url工具类

Java代码  
  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,  
  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. }  
  28.   
  29. 用法:  
  30. var myURL = parseURL('http://abc.com:8080/dir/index.html?id=255&m=hello#top');  
  31.     
  32. myURL.file;     // = 'index.html'  
  33. myURL.hash;     // = 'top'  
  34. myURL.host;     // = 'abc.com'  
  35. myURL.query;    // = '?id=255&m=hello'  
  36. myURL.params;   // = Object = { id: 255, m: hello }  
  37. myURL.path;     // = '/dir/index.html'  
  38. myURL.segments; // = Array = ['dir', 'index.html']  
  39. myURL.port;     // = '8080'  
  40. myURL.protocol; // = 'http'  
  41. myURL.source;   // = 'http://abc.com:8080/dir/index.html?id=255&m=hello#top'  
  42.   
  43. 取得URL的参数,以对象形式返回!  
  44. var getParam = function(path){  
  45.     var result = {},param = /([^?=&]+)=([^&]+)/ig,match;  
  46.     while((match = param.exec(path)) != null){  
  47.         result[match[1]] = match[2];  
  48.     }  
  49.     return result;  
  50. }  
  51.    
  52. Object.keys = Object.keys || function(obj){  
  53.     var result = [];  
  54.     for(var i in obj){  
  55.         if(obj.hasOwnProperty(i)){  
  56.             result.push(i)  
  57.         }  
  58.     }  
  59.     return result;  
  60. }  
  61. var path = "http://tieba.baidu.com/f?ct=318767104&tn=baiduKeywordSearch&sc=1&pn=0&rn=50&lm=4&rs4=2&rs3=2&word=%D0%C2%BE%D3%D5%D1%C4%CB&frs=jpq";  
  62.    
  63. var r = getParam(path);  
  64. alert(Object.keys(r))//ct,tn,sc,pn,rn,lm,rs4,rs3,word,frs  
  65. //2010.9.22更新  
  66. function getParam(name){
    //获取参数值   
  67.     var sUrl = window.location.search.substr(1);  
  68.     var r = sUrl.match(new RegExp("(^|&)" + name + "=([^&]*)(&|$)"));  
  69.     return (r == null ? null : unescape(r[2]));  
  70. }  

 

转载地址:http://otmra.baihongyu.com/

你可能感兴趣的文章
2013编程之美全国挑战赛第一场-传话游戏
查看>>
测试之新生入学系统,多一份收获
查看>>
无锁和无等待的定义和例子
查看>>
linux中c语言errno的使用
查看>>
【Mongo】uploadify插件帮助实现批量上传
查看>>
SpriteBuilder&amp;Cocos2D使用CCEffect特效实现天黑天亮过度效果
查看>>
04-Windows频繁打开和关闭端口可能引发的问题 | 07.杂项
查看>>
hibernate总结-映射
查看>>
【SSH项目实战】国税协同平台-5.头像上传功能
查看>>
【云栖大会】青磁:从金融上云到云上金融
查看>>
如何在 ASP.NET 4.6 与 IIS10 中运用 HTTP/2 ?
查看>>
Activiti的引擎与引擎配置对象
查看>>
Vue 学习笔记 (三) -- VueCli 3 项目配置
查看>>
Flutter-BLoC-第三讲
查看>>
html~display的使用
查看>>
iOS开发教你如何删除Xcode中无用的配置文件Provisioning Profiles
查看>>
谁在使用MongoDB
查看>>
Python爬虫入门教程 8-100 蜂鸟网图片爬取之三
查看>>
Java NIO(四)Buffer
查看>>
Dubbo Mesh 在闲鱼生产环境中的落地实践
查看>>