惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
Y
Y Combinator Blog
WordPress大学
WordPress大学
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
A
About on SuperTechFans
小众软件
小众软件
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
Recent Announcements
Recent Announcements
GbyAI
GbyAI
I
InfoQ
The GitHub Blog
The GitHub Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
C
Check Point Blog
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
量子位
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog

博客园 - Ricebug

android SDK下载及中文API地址 怎么让我们自己开发的Android程序设为默认启动 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错 Eclipse 安装中文插件 Android开发环境搭建(jdk+eclip+android sdk) JS innerHTML Double Quotes 正则表达式有无g参数时,test()结果的差异 [转载]分享8个超棒的免费高质量图标搜索引擎 平时技巧收集 ActionScript3.0平铺由外部加载的图片 - Ricebug - 博客园 截取中英文字符串 IE处理GIF动画图片onload事件的一个BUG BulkLoader类使用 Asp.net缓存动态图片 [原创]jQuery动画弹出窗体支持多种展现方式 JQuery上传插件Uploadify使用详解及错误处理 [原创]jQuery插件处女座--超链接滑动动画 js页面定位,相关几个属性 全国哀悼日 网站变灰装(附代码)
JS文件传参及处理技巧
Ricebug · 2010-05-13 · via 博客园 - Ricebug

其实为js文件传参是很久就接触过的一个问题,只是一直没有放在心上,今天在无忧看到又有人问这个问题,今日总结一下。

解决思路:

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://www.cnitblog.com/yemoo/archive/2008/03/11/40799.html