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
 
只要对字符串处理函数比较熟练,基本很容易看懂
源代码与注解:
 ;(function( window, undefined ){
var ghostWuUrlParser = function( url, key ){
var res = {};
if( typeof url === 'undefined' ) {
throw new Error( '请输入有效的url' );
} //p:查询 '?'号是否存在
var _url = url, p = _url.search( /\?/ );
//_url: 根据p的查询结果 把问号后面的内容赋值给_url
( p != -1 ) && ( _url = _url.slice( p + 1 ) );
var q = _url.split( '&' );
for( var i = 0, len = q.length; i < len; i++ ){
var str = q[i],
pos = str.search( '=' ),
//k: 参数的键
k = str.substring( 0, pos != -1 ? pos : str ),
//v: 参数的值
v = str.substring( pos != -1 ? ( pos + 1 ) : str );
v && ( v = decodeURIComponent( v ) );
if( res.hasOwnProperty( k ) ){
//如果出现同名的key, 且不是数组,就把当前的值 跟之前的值 合并到一个数组
if( !( res[k] instanceof Array ) ){
res[k] = [ res[k], v ];
}else {
//第三次同名的key 就执行这段
res[k].push( v );
}
}else {
//第一次不存在的时候,直接存
k && (res[k] = v);
}
}
//传递了key 就提取对应的key, 否则返回完整结果
return key ? res[key] : res;
}
//暴露接口
window.ghostWuUrlParser = ghostWuUrlParser;
})( window, undefined );

自己动手封装一个url参数解释器( ghostWuUrlParser.js )的更多相关文章

  1. 深入springboot原理——动手封装一个starter

    从上一篇文章<深入springboot原理——一步步分析springboot启动机制(starter机制)> 我们已经知道springboot的起步依赖与自动配置的机制.spring-bo ...

  2. 【JavaScript框架封装】自己动手封装一个涵盖JQuery基本功能的框架及核心源码分享(单文件版本)

    整个封装过程及阅读JQuery源码的过程基本上持续了一个月吧,最终实现了一个大概30%的JQuery功能的框架版本,但是里面涉及的知识点也是非常多的,总共的代码加上相关的注释大概在3000行左右吧,但 ...

  3. url参数的编码解码Demo

    为了保证在页面传递数据的安全性,我们通常会对Url传递的参数进行编码解码操作.我们写一个Demo剖析URL编码解码过程. 完整Demo下载地址 1. Url参数如何在服务端进行编码和解码. 1.1 U ...

  4. http post url参数封装(key token 及校验码)

    post请求本来是一种很常见的web请求方式,相信许多项目都有一系列的封装工具类. 今天遇着一个特殊的需求. 需要在post的请求url内封装相应的token 与及key相关的值,这就奇怪了,url封 ...

  5. 分享一个好用的函数吧,将js中的对象转成url参数

    JavaScript&jQuery获取url参数方法 这个函数呢是自己在写基于Vue+ElementUI管理后台时用到的,,下面列出来两种使用方式: 最普通的,封装一个js函数 /** * 对 ...

  6. 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)

    定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...

  7. Django路由系统---django重点之url传递一个默认参数

    django重点之url传递一个默认参数 可以利用这个特性,让2个URL映射一个函数,但是返回2个不同的HTML url(r'default_param1', views.def_param,), u ...

  8. Javasrcipt中从一个url或者从一个字符串中获取参数值得方法

    从url中获取参数值是che程序开发过程中的常用需求,偶然得闲,便抽空研究了一下javasrcipt下,获取参数的办法(JAVA中也类似). 首先看url的规范: URL组成:protocol :// ...

  9. Ajax请求参数到一个URL包含下划线或者v(_、v)

    Ajax请求参数到一个URL包含下划线或者v 初学者的我,在F12时,看到这个地址就会很奇怪,不理解什么东西 经过查找了解到浏览器默认开启缓存,该参数不是其他请求所必须的,把它去掉不影响数据的获取 h ...

随机推荐

  1. jq-animate

    jq-animate: <!doctype html> <html> <head> <meta charset="utf-8"> & ...

  2. Backbone中父子view之间的值传递

    backbone中,使用最多的莫过于在view中进行操作,如模板的渲染以及事件函数的定义.为了提高代码的可维护性,一般地我们会写多个视图即view,将界面按照功能的不同进行模块化划分,模块与view一 ...

  3. 网络编程学习笔记(三)UDP

    1.不可靠的.效率高.数据报(数据打成一个小包一个小包地往外发).非连接. 2.UDP是非连接的,因此严格来说并不区分服务器端和客户端. 3.UDP通信过程:UDP都是通过字节数组进行对话的.     ...

  4. webpack1 新手入门教程

    本文github仓库地址: https://github.com/Rynxiao/webpack-tutorial ,里面包括了本教程的所有代码. [如果你觉得这篇文章写得不错,麻烦给本仓库一颗星:- ...

  5. 角点检测和匹配——Harris算子

    一.基本概念 角点corner:可以将角点看做两个边缘的交叉处,在两个方向上都有较大的变化.具体可由下图中分辨出来: 兴趣点interest point:兴趣点是图像中能够较鲁棒的检测出来的点,它不仅 ...

  6. Struts 框架 之 文件上传下载案例

    Struts 框架 文件上传 1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本) 导jar包:

  7. springmvc(一) springmvc框架原理分析和简单入门程序

    springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~ --WH 一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解 ...

  8. 详解Android Activity---Activity的生命周期

    转载注明来自:  http://www.cnblogs.com/wujiancheng/ 一.正常情况下Activity的生命周期:  Activity的生命周期大概可以归为三部分 整个的生命周期:o ...

  9. Java虚拟机:GC算法深度解析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在前面的文章里介绍了可达性分析算法,它为我们解决了判定哪些对象可以回收的问题,接下来就该我们的垃圾收集算法出场了.不同的垃圾收集算法有各自 ...

  10. 或许你不知道的10条SQL技巧(转自58沈剑原创)

    这几天在写索引,想到一些有意思的TIPS,希望大家有收获. 一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and s ...