解决思路:
1、首先获取到当前js文件的src属性,这里有一个小技巧:我们只需要获取当前页面最后一个script标记内容即可。
为什么??因为js是顺序解析的,当前js脚本解析时后面的js都还没有解析到,当然就认为自己就是最后一个script了。此外,这样获取还有一个好处:我们可以多次引用同一个文件且传入不同的参数,这样可以在js文件中根据参数不同做不同处理,很巧妙把!简直就是动态语言了。
代码如下:
复制代码 代码如下:
var scripts=document.getelementsbytagname(script);
var curjs=scripts[scripts.length-1]; //curjs就是我们当前的js文件
得到这个就好办了,通过curjs.src即可获取到完整的路径内容(包括参数)。
2、下面的就是解析参数内容了,解析的过程相当简单,相信很多人都容易完成这一步。
但我们要对一个特殊情况进行处理:如果一个参数被传入了多次,则要将该参数值转换为数组存储每一个传入的值。
完整测试脚本如下:
复制代码 代码如下:
var getargs=(function(){
var sc=document.getelementsbytagname('script');
var paramsarr=sc[sc.length-1].src.split('?')[1].split('&');
var args={},argsstr=[],param,t,name,value;
for(var i=0,len=paramsarr.length;iparam=paramsarr[i].split('=');
name=param[0],value=param[1];
if(typeof args[name]==undefined){ //参数尚不存在
args[name]=value;
}else if(typeof args[name]==string){ //参数已经存在则保存为数组
args[name]=[args[name]]
args[name].push(value);
}else{ //已经是数组的
args[name].push(value);
}
}
/*在实际应用中下面的showarg和args.tostring可以删掉,这里只是为了测试函数getargs返回的内容*/
var showarg=function(x){ //转换不同数据的显示方式
if(typeof(x)==string&&!/\d+/.test(x)) return '+x+'; //字符串
if(x instanceof array) return [+x+] //数组
return x; //数字
}
//组装成json格式
args.tostring=function(){
for(var i in args) argsstr.push(i+':'+showarg(args[i]));
return '{'+argsstr.join(',')+'}';
}
return function(){return args;} //以json格式返回获取的所有参数
})();
alert(getargs());
alert(username:+getargs()[username]);
测试示例的html源码:
复制代码 代码如下:
new document
脚本之家演示代码 http://demo.jb51.net/js/2011/jscc/