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 相关文章推荐
用javascript自动显示最后更新时间
Mar 15 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
May 07 Javascript
JavaScript 原型与继承说明
Jun 09 Javascript
某人初学javascript的时候写的学习笔记
Dec 30 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
七个不允许错过的jQuery小技巧
Dec 21 Javascript
JavaScript基础知识之方法汇总结
Jan 24 Javascript
vue2.0开发实践总结之入门篇
Dec 06 Javascript
前端页面文件拖拽上传模块js代码示例
May 19 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
Typescript的三种运行方式(小结)
Sep 18 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
网页中CDATA标记的说明
2010/09/12 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
详解Python中的文本处理
2015/04/11 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
学生会主席就职演讲稿
2014/01/14 职场文书
安卓程序员求职信
2014/02/28 职场文书
松材线虫病防治方案
2014/06/15 职场文书
优秀党员推荐材料
2014/12/18 职场文书
开除员工通知
2015/04/22 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
推普标语口号大全
2015/12/26 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python
Python如何用re模块实现简易tokenizer
2022/05/02 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技