JavaScript URL参数读取改进版


Posted in Javascript onJanuary 16, 2009

下面是三水点靠木一直也在用的几种方法

<script language="javascript" type="text/javascript"> 
function request(paras){ 
var url = location.href; 
var paraString = url.substring(url.indexOf("?")+1,url.length).split("&"); 
var paraObj = {} 
for (i=0; j=paraString[i]; i++){ 
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length); 
} 
var returnValue = paraObj[paras.toLowerCase()]; 
if(typeof(returnValue)=="undefined"){ 
return ""; 
}else{ 
return returnValue; 
} 
} 
//下面是应用代码 
var theurl 
theurl=request("url"); 
if (theurl!=''){ 
location=theurl 
} 
</script>

下面是正则函数
用Javascript正则实现url链接的解析类
https://3water.com/article/15000.htm

下面的代码有点乱
/* 《JavaScript权威指南》介绍的更简洁的取 URL 参数的方法,不用正则表达式,用一次循环。一次性返回一个对象的好处是只需要调用一次此函数,参数和值对可以存在一个对象里,以后再取其它参数的值就不用再调用此函数了,只要取对象的属性就行了。

* 用法: 
* var args = getArgs( ); // 从 URL 解析出参数 
* var q = args.q || ""; // 如果定义了某参数,则使用其值,否则给它一个默认值 
* var n = args.n ? parseInt(args.n) : 10; 
*/ 
var getArgs = function () 
{ 
var args = new Object( ); //声明一个空对象 
var query = window.location.search.substring(1); // 取查询字符串,如从 http://www.snowpeak.org/testjs.htm?a1=v1&a2=&a3=v3#anchor 中截出 a1=v1&a2=&a3=v3。 
var pairs = query.split("&"); // 以 & 符分开成数组 
for(var i = 0; i < pairs.length; i++) { 
var pos = pairs[i].indexOf('='); // 查找 "name=value" 对 
if (pos == -1) continue; // 若不成对,则跳出循环继续下一对 
var argname = pairs[i].substring(0,pos); // 取参数名 
var value = pairs[i].substring(pos+1); // 取参数值 
value = decodeURIComponent(value); // 若需要,则解码 
args[argname] = value; // 存成对象的一个属性 
} 
return args; // 返回此对象 
}

它的突出优点就是程序只用执行一次提取操作,以后再重复取参数值,都不用再执行程序了。取 URL 参数还是这样比较简便易行,又好理解。

下面是我此前发表的“不用循环”但“有些太复杂”的版本:

//不用循环纯用正则实现从 URL 中取参数的值。取代循环的核心技术是字符串的 replace() 方法可以用函数作第二参数,按用户定义的方式去替换。 
//若有此参数名但无值,则返回空字符串;若无此参数名,返回 undefined。 
var getArg = function(argname) 
{ 
var str = location.href; 
var submatch; 
//先从 URL 中取出问号和井口与之间的查询字符串,如从 http://www.snowpeak.org/testjs.htm?a1=v1&a2=&a3=v3#anchor 中截出 a1=v1&a2=&a3=v3。 
//问号是模式的特殊字符,所以要写成 \?;井号可有可无,所以模式结尾是 #? 
if (submatch = str.match(/\?([^#]*)#?/)) 
{ 
//取到捕捉的子匹配形如 a1=v1&a2=&a3=v3,在前面加个 & 做成规则的 &a1=v1&a2=&a3=v3 便于下一步替换 
var argstr = '&'+submatch[1]; 
//做个替换用的函数,把找到的每组形如 &a1=v1 替换成 a1:"v1", 这样的对象定义用的属性声明 
var returnPattern = function(str) 
{ 
//$1 和 $2 代表捕捉到的第1个和第2个子匹配,必须用在字符串里 
return str.replace(/&([^=]+)=([^&]*)/, '$1:"$2",'); 
} 
//执行一个全局的正则替换,第二参数就是刚才定义的替换函数,把 a1=v1&a2=&a3=v3 替换成 a1:"v1",a2:"",a3:"v3", 
argstr = argstr.replace(/&([^=]+)=([^&]*)/g, returnPattern); 
//最后再执行一个对象的声明,需要形如 var retvalue = {a1:"v1",a2:"",a3:"v3"}; 的对象声明,而刚才替换完的字符串结尾还有个逗号,把结尾的逗号用 substr 截掉即可 
eval('var retvalue = {'+argstr.substr(0, argstr.length-1)+'};'); 
//现在就得到了一个对象,URL 中每个参数名是其属性名,参数值是对应的属性值 
return retvalue[argname]; 
} 
} //测试 
document.write('a1='+getArg('a1')+', a2='+getArg('a2')+', a3='+getArg('a3'));
Javascript 相关文章推荐
JavaScript中Object和Function的关系小结
Sep 26 Javascript
javascript制作网页图片上实现下雨效果
Feb 26 Javascript
AngularJS快速入门
Apr 02 Javascript
简介JavaScript中strike()方法的使用
Jun 08 Javascript
javascript禁止访客复制网页内容的实现代码
Aug 05 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
jQuery File Upload文件上传插件使用详解
Dec 06 Javascript
javaScript 连接打印机,打印小票的实例
Dec 29 Javascript
jQuery中库的引用方法
Jan 06 jQuery
详解vue-cli官方脚手架配置
Jul 20 Javascript
Vue 引入AMap高德地图的实现代码
Apr 29 Javascript
js实现的订阅发布者模式简单示例
Mar 14 Javascript
JavaScript 在线压缩和格式化收藏
Jan 16 #Javascript
解javascript 混淆加密收藏
Jan 16 #Javascript
js 浮动层菜单收藏
Jan 16 #Javascript
jquery中常用的SET和GET
Jan 13 #Javascript
JavaScript 私有成员分析
Jan 13 #Javascript
js利用Array.splice实现Array的insert/remove
Jan 13 #Javascript
JavaScript delete操作符应用实例
Jan 13 #Javascript
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
解析Python中的__getitem__专有方法
2016/06/27 Python
python+OpenCV实现图像拼接
2020/03/05 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
分厂厂长岗位职责
2013/12/29 职场文书
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
《去年的树》教学反思
2014/04/11 职场文书
电视节目策划方案
2014/05/16 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
党员个人总结自评
2015/02/14 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
上诉答辩状范文
2015/05/22 职场文书
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
详解Python如何批量采集京东商品数据流程
2022/01/22 Python
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB