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 相关文章推荐
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
Dec 07 Javascript
gridpanel动态加载数据的实例代码
Jul 18 Javascript
js动态删除div元素基本思路及实现代码
May 08 Javascript
jQuery中:last选择器用法实例
Dec 30 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
Jul 28 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
详解JS中的this、apply、call、bind(经典面试题)
Sep 19 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
微信小程序仿美团城市选择
Jun 06 Javascript
vue中node_modules中第三方模块的修改使用详解
May 31 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
Apr 09 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
python与idea的集成的实现
2020/11/20 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
门卫工作岗位职责
2013/12/17 职场文书
爱国演讲稿500字
2014/05/04 职场文书
文明市民先进事迹
2014/05/15 职场文书
好媳妇事迹材料
2014/12/24 职场文书
单位租车协议书
2015/01/29 职场文书
出生证明范本
2015/06/15 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
浅析Django接口版本控制
2021/06/26 Python