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 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
一个原生的用户等级的进度条
Jul 03 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
12行javascript代码绘制一个八卦图
Apr 02 Javascript
jQuery实现可展开合拢的手风琴面板菜单
Sep 15 Javascript
jQuery对象与DOM对象转换方法详解
May 10 Javascript
学习Node.js模块机制
Oct 17 Javascript
微信小程序  audio音频播放详解及实例
Nov 02 Javascript
pm2 部署 node的三种方法示例
Oct 20 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
May 23 Javascript
Vue中遍历数组的新方法实例详解
Jul 21 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 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
Syphon 使用方法
2021/03/03 冲泡冲煮
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php 魔术函数使用说明
2010/02/21 PHP
php类常量的使用详解
2013/06/08 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现模拟时钟代码推荐
2015/11/08 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
Expected conditions模块使用方法汇总代码解析
2020/08/13 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
婚前协议书范本
2014/04/15 职场文书
大学生党员自我评价
2015/03/04 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
房贷工资证明范本
2015/06/12 职场文书
素质教育学习心得体会
2016/01/19 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL