JS 文件传参及处理技巧分析


Posted in Javascript onMay 13, 2010

解决思路:

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;i<len;i++){ 
param=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源码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title> new document </title> 
<meta name="generator" content="editplus" /> 
<meta name="author" content="" /> 
<meta name="keywords" content="" /> 
<meta name="description" content="" /> 
<script type="text/javascript" src="test.js?id=4&username=yemoo&id=1&uid=110"></script> 
<script type="text/javascript" src="test.js?id=5&username=ajaxbbs&id=7&uid=253"></script> 
<script type="text/javascript" src="test.js?id=6&username=jack&id=8&uid=258"></script> 
</head> 
<body> 
</body> 
</html>

三水点靠木演示代码 http://demo.3water.com/js/2011/jscc/
Javascript 相关文章推荐
jquery 插件开发备注
Aug 27 Javascript
jQuery学习笔记之jQuery的DOM操作
Dec 22 Javascript
关于html+ashx开发中几个问题的解决方法
Jul 18 Javascript
script标签属性type与language使用选择
Dec 02 Javascript
Node.js开发指南中的简单实例(mysql版)
Sep 17 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
Mar 14 Javascript
javascript结合CSS实现苹果开关按钮特效
Apr 07 Javascript
基于angularJS的表单验证指令介绍
Oct 21 Javascript
js遍历获取表格内数据的方法(必看)
Apr 06 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
React操作真实DOM实现动态吸底部的示例
Oct 23 Javascript
解决vue打包后刷新页面报错:Unexpected token
Aug 27 Javascript
Javascript 面向对象 继承
May 13 #Javascript
Javascript 面向对象 对象(Object)
May 13 #Javascript
Javascript 面向对象 命名空间
May 13 #Javascript
javascript 面向对象 function类
May 13 #Javascript
该如何加载google-analytics(或其他第三方)的JS
May 13 #Javascript
Javascript 面向对象 继承
May 13 #Javascript
Javascript 面向对象 重载
May 13 #Javascript
You might like
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
Node.js的特点详解
2017/02/03 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
python自动下载图片的方法示例
2020/03/25 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
高三自我鉴定怎么写
2013/10/19 职场文书
工厂厂长的职责
2013/12/12 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
投资合作协议书范本
2014/04/17 职场文书
临床护理求职信
2014/04/26 职场文书
升职自荐信范文
2015/03/27 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
Redis过期数据是否会被立马删除
2022/07/23 Redis