日期:2014-05-16 浏览次数:20426 次
随着浏览器端JavaScript编程的流行,经常碰到要分析和获取url上带的参数。
先看代码:
function getUrlParam(name) { var reg = new RegExp("[?&]" + name + "=([^?&]*)[&]?", "i"); var match = location.search.match(reg); return match == null ? "" : match[1]; }?这个方法通过构造一个正则表达式来匹配到需要查询的url参数,location.search是获取到url中的查询字符串部分。这个方法的优点是简洁,缺点是每次都需要对字符串进行分析查找,多次查询同一个参数效率低下,所以有了下面这个方法。
代码如下:
var getUrlParam = function(){ var args = null; return function(name){ if(args === null){ if(location.search == "") return ""; var queryArray = location.search.substring(1).split("&"); var i; args = {}; for(i = 0;i < queryArray.length;i++){ var match = queryArray[i].match(/([^=]+)=([^=]+)/); if(match !== null){ args[match[1]] = match[2]; } } } return args[name] == undefined ? "" : args[name]; }; }();?这个方法利用了js的函数闭包,将url参数都保存在一个匿名函数里面的args变量中,而且除了通过getUrlParam外,任何方法都访问不到该变量。而且只有第一次获取url参数的时候才会分析url,以后就直接从变量args中读取。不过这个方法也有缺点,就是代码比较复杂,还有就是一次把不需要的参数也解析出来了,有的时候只用一次就太不值了,还有闭包带来的性能降低。其优点就是对于需要多次访问的时候,除了第一次访问需要解析,后面都很快。
综上所述,如果在一个页面中需要多次获取url参数就推荐使用第二种方法,如果访问次数很少的话第一种则更好。
[转自:http://binbinliao.com/programming/javascript-urlparams.html]