JavaScript URL参数读取改进版
JavaScript URL参数读取改进版
发布时间:2016-12-30 来源:查字典编辑
摘要:下面是查字典教程网一直也在用的几种方法复制代码代码如下:functionrequest(paras){varurl=location.hre...

下面是查字典教程网一直也在用的几种方法

复制代码 代码如下:

<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链接的解析类

http://www.jb51.net/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教程学习
编程开发子分类