对前端同学来说,经常要碰到一种比较麻烦的情况,那就是url查询字符串的解析问题。说起来也不难,就是比较麻烦。

  具体来处理这种情况的时候,相信有一部分同学就是针对具体项目中的需要的字符去正则匹配一下,业务需求嘛,解决就算了。原来我也是这样干的。不过最好还是抽一种方法出来,毕竟这种工具类的发放很多地方都会用到。当然现在github上有很多大牛的作品可以借鉴。今天自己也来实现一下。

  总体思路很简单,就是正则去匹配看是否有查询字符串的出现,不过为了功能丰富点也就是随手加上了支持自定义字符串的解析(有点鸡肋),可选返回的是数组或者对象。具体处理可以见代码:

/**
* @method queryString
* @param getObj 结果为对象否则为数组
* @default false
* @param str 需要解析的string
* @default location.search
* @return Object or Array
* */
function queryString(getObj,str){
var string = (str!== undefined) ? str : window.location.search;
var result = string.match(new RegExp("[^\?\&]+=[^\?\&]+","g"));
if(result == null){
result = '';
}else if(getObj){
var params = {};
for(var i = 0; i < result.length; i++){
var res = result[i].split('=');
var key = res[0],
value = res[1];
params[key] = value;
}
result = params;
}
return result;
}

  2、关于业务方的需求,用一句话来形容比较合适:天长地久有时尽,需求变动无绝期。可能你有时候说,后端tm不需要全部的查询字符串他只要一个或者多个,反正就不要全部的。你给我个对象还是需要处理呀,能不能一步到位暴露获取具体的某个key的值的方法。当然既然都抽出来了那就要有这个意识。

  还是先说实现,其实与上面的思路也很类似只不过就是去匹配具体值了,然后返回字符串喽 :具体见代码

 1 /**
2 * @method queryByKey 获取指定key的值
3 * @param key
4 * @default null
5 * @return string
6 * */
7 function queryByKey(key){
8 var result = location.search.match(new RegExp(key+"=[^\?\&]+","g"));
9 var value = result?result[0].split('=')[1]:'';
10 return value;
11 }

  3、此外在方法一的基础上还可以新增一个方法,根据索引来获取具体值:

1 /**
2 * @method queryByKey 获取指定index的值
3 * @param index
4 * @default null
5 * @return string
6 * */
7 function queryByIndex(index){
8 var param = queryString()[index];
9 var value = param ? param.split('=')[1] : ''
10 return value;
11 }

   一句话抛砖引玉,希望有大牛来不吝赐教。有兴趣的同学可以移步到https://github.com/xiaoxiangdaiyu/querystring-url

   参考文章:http://www.cnblogs.com/sunnycoder/archive/2010/02/28/1674998.html

最新文章

  1. 在powerdesigner中创建物理数据模型
  2. sql server: sql script
  3. [Linux学习]Shell脚本(1)--函数,输入,if判断(持续更新)+删除空行 +保存当前路径
  4. 对json排序
  5. 协程python
  6. IGV软件
  7. javaScript封装的各种写法
  8. PhpStorm Git 配置
  9. sdut 2153 Clockwise (2010年山东省第一届ACM大学生程序设计竞赛)
  10. 实用Photoshop快捷键
  11. hdu 4540 威威猫系列故事——打地鼠 dp小水题
  12. jQuery EasyUI API 中文文档 - 面板(Panel)
  13. Java web 基础
  14. Visual Studio 2010/2013 查看DLL接口(函数)
  15. 用命令行撤销工作区的所有更改(修改文件&amp;&amp;新增文件)
  16. Redis学习——Linux环境下Redis的安装(一)
  17. Docker安装nginx
  18. LOJ2803 CCC2018 平衡树 数论分块、记忆化搜索
  19. openfire群消息投递
  20. Android Launcher分析和修改1——Launcher默认界面配置(default_workspace)

热门文章

  1. 如何使用的Ue4自带的SQLiteSupport
  2. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
  3. 冰球项目日志2-yjw
  4. java中采用dom4j解析xml文件
  5. EntityFrame CodeFirst 自动生成表
  6. ZeroMQ接口函数之 :zmq_strerror - 获取ZMQ错误描述字符串
  7. crontab安装和用法(定时任务)
  8. 对jquery的ajax进行二次封装
  9. CommonJS Promises/A规范
  10. javascript 减少回流