MaxIE

人生之路并不漫长,来来去去的都是那些狭窄的街巷。可是来时未曾相约,你才让我独自苦苦等候,遥遥无期的守望,险些凝固成历史的永恒。

 

JS获取自身所在文件的目录路径

     很多时候我们都需要在js文件中获取该文件的详细路径,以便根据其他文件与该js的相对位置计算并设置其他一些文件如图片或样式或脚本的目录路径。我们一般都这样做:

     假设外部js文件的文件名为:test.js,则在test.js中都这样写:

var js=document.scripts;
var jsPath;
for(var i=0;i<js.length;i++){
 if(js[i].src.indexOf("test.js")>-1){
   jsPath=js[i].src.substring(0,js[i].src.lastIndexOf("/")+1);
 }
}
alert(jsPath);

     或者为了提高效率,这样写

var js=document.scripts;
var jsPath;
for(var i=js.length;i>0;i--){
 if(js[i-1].src.indexOf("test.js")>-1){
   jsPath=js[i-1].src.substring(0,js[i-1].src.lastIndexOf("/")+1);
 }
}
alert(jsPath);



这种思路很清晰,根据文件名获取引用的文件的src属性并进行判断截取即可。

但这种办法有以下两个缺点:
1、需要遍历页面的js文件,有时可能效率会比较低。
2、如果页面中出现目录不同的重名的js文件则可能判断错误。

其实我们可以有更简单的办法来准确获取路径,这是在一次js测试突然发现并幡然醒悟的。

var js=document.scripts;
js=js[js.length-1].src.substring(0,js[js.length-1].src.lastIndexOf("/")+1);
alert(js);



直接使用js.length?这会正确吗?
其实仔细想想,由于判断路径的js代码一般都直接放在js文件中而不是函数中,所以当加载该js文件时会立即执行其中的语句,而执行此语句时所获取到的js文件数目正好是js.length-1,因为页面后面的js文件还没有加载,所以该处的js文件获取的数目并不是页面所有的js文件的数目。这样一来,获取路径就无需再遍历了,而且文件判断也无需文件名,判断更加准确(js.length-1永远都是其文件本身)。

posted on 2007-10-25 11:24 MaxIE 阅读(412) 评论(2)  编辑 收藏 网摘 所属分类: ASP&VB

评论

#1楼  2007-11-09 11:36 工工工 [未注册用户]

这个在FF下无效   回复  引用    

#2楼  2008-07-16 01:11 簡簡單單..      

Mark   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接:


 

导航

统计

公告

本人新站上线....嘿嘿

2008年高考指南


与我联系

搜索

 

常用链接

留言簿(15)

随笔分类(190)

随笔档案(458)

文章分类(142)

文章档案(163)

友情连接

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜