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 );
  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/ghostwu/p/7327709.html
Copyright © 2011-2022 走看看