zoukankan      html  css  js  c++  java
  • 自己动手封装一个url参数解释器( ghostWuUrlParser.js )

    ghostWuUrlParser.js的作用是分析一段url中的查询参数,即: '?'号后面的 键值对参数.

    ghostWuUrlParser.js 使用说明:

    ghostWuUrlParser( 'https://www.baidu.com/s?wd=ghostwu&name=ghost&age=22&sex=man&name=zhangsan&name=lisi' )
    解释出来的结果是:
    {wd: "ghostwu", name: Array(3), age: "22", sex: "man"}
    Array(3) = [ 'ghost', 'zhangsan', 'lisi' ]
     
    ghostWuUrlParser( 'https://www.baidu.com/s?wd=ghostwu&name=ghost&age=22&sex=man&name=zhangsan' )
    解释出来的结果是:
    {wd: "ghostwu", name: Array(2), age: "22", sex: "man"}
     
    ghostWuUrlParser( 'https://www.baidu.com/s?wd=ghostwu&name=ghost&age=22&sex=man' )
    解释出来的结果是:
    {wd: "ghostwu", name: "ghost", age: "22", sex: "man"}
     
    ghostWuUrlParser( 'https://www.baidu.com/s?wd=ghostwu&name=ghost&age=22&sex=man', 'wd' )
    解释出来的结果是: ghostwu
     
    只要对字符串处理函数比较熟练,基本很容易看懂
    源代码与注解:
     1 ;(function( window, undefined ){
     2     var ghostWuUrlParser = function( url, key ){
     3         var res = {};
     4         if( typeof url === 'undefined' ) {
     5             throw new Error( '请输入有效的url' );
     6         }
     7 
     8         //p:查询 '?'号是否存在
     9         var _url = url, p = _url.search( /?/ );
    10         //_url: 根据p的查询结果 把问号后面的内容赋值给_url
    11         ( p != -1 ) && ( _url = _url.slice( p + 1 ) );
    12         var q = _url.split( '&' );
    13         for( var i = 0, len = q.length; i < len; i++ ){
    14             var str = q[i],
    15             pos = str.search( '=' ),
    16             //k: 参数的键
    17             k = str.substring( 0, pos != -1 ? pos : str ),
    18             //v: 参数的值
    19             v = str.substring( pos != -1 ? ( pos + 1 ) : str );
    20             v && ( v = decodeURIComponent( v ) );
    21             if( res.hasOwnProperty( k ) ){
    22                 //如果出现同名的key, 且不是数组,就把当前的值 跟之前的值 合并到一个数组
    23                 if( !( res[k] instanceof Array ) ){
    24                     res[k] = [ res[k], v ];
    25                 }else {
    26                     //第三次同名的key 就执行这段
    27                     res[k].push( v );
    28                 }
    29             }else {
    30                 //第一次不存在的时候,直接存
    31                 k && (res[k] = v);
    32             }
    33         }
    34         //传递了key 就提取对应的key, 否则返回完整结果
    35         return key ? res[key] : res;
    36     }
    37     //暴露接口
    38     window.ghostWuUrlParser = ghostWuUrlParser;
    39 })( window, undefined );
  • 相关阅读:
    使用replaceAll替换“/”为“/”
    如何在Lucene里面进行数字范围搜索 (Numeric Range Query)
    Java中的参数传递
    安装配置WordPress 3.0的多站点功能
    Apache Hadoop 项目介绍
    Java中的Set操作
    使用Desktop API in Java SE 6打开文件或者网页
    Java集合(转帖)
    数据结构牛客网习题纠错130
    PAT 1045 Favorite Color Stripe[dp][难]
  • 原文地址:https://www.cnblogs.com/ghostwu/p/7327709.html
Copyright © 2011-2022 走看看