JavaScript-js获取所在文件夹路径
用于网页
我现在想在js文件中调用一个图片,但是路径无法识别,可路径会变化,所以希望大家解答一下,如何获得js所在文件的上级目录,例如:
当前js所在文件夹1/2/3/4/甲/xx.js
现在有个文件在1/2/3/4/乙/xx.png
如何在js中调用的这个png
谢谢大家,请帮忙
附上代码
imageLoading: 'images/lightbox-ico-loading.gif',
imageBtnPrev: 'images/lightbox-btn-prev.gif',
imageBtnNext: 'images/lightbox-btn-next.gif',
imageBtnClose: 'images/lightbox-btn-close.gif',
imageBlank: 'images/lightbox-blank.gif',
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
/**
* 获取当前脚本的 URI
*
* @private
* @method currentScriptPath
* @return {String}
*/
function currentScriptPath() {
var scripts = document.getElementsByTagName( "script" );
var script = scripts[ scripts.length - 1 ];
return script.hasAttribute ?
script.src :
// hack for IE8-
// see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx
script.getAttribute( "src", 4 );
}
/**
* 获取指定文件所在的目录 URI
*
* @private
* @method dirname
* @param uri {String}
* @return {String}
*/
function dirname( uri ) {
return uri.match( /[^?#]*// )[0];
}
/**
* 获取指定文件的绝对路径
*
* @private
* @method specifyFile
* @param relative_uri {String} 指定文件的相对路径
* @param base_uri {String} 基于的 uri
* @return {String}
*/
function specifyFile( relative_uri, base_uri ) {
var dotPath = relative_uri.match( /(.{1,2}/)+/ )[0];
var dotSegments = getSegments( dotPath );
if ( base_uri === undefined ) {
base_uri = dirname( currentScriptPath() );
}
var segements = getSegments( base_uri );
if ( dotPath !== "./" ) {
for ( var i = 0; i < dotSegments.length; i++ ) {
segements.pop();
}
}
return segements.join("/") + "/" + relative_uri.slice( relative_uri.indexOf(dotPath) + dotPath.length );
}
/**
* 获取 URI 片段
*
* @private
* @method getSegments
* @param uri {String} uri
* @return {Array}
*/
function getSegments( uri ) {
var segements = uri.split( "/" );
segements.pop();
return segements;
}
定义好函数之后,只要——
specifyFile( "图片文件相对于当前 js 文件的路径" );
注意:该代码中获取当前脚本文件路径的方式,只在运行到那个 js 文件时才有效!如果是定义成全局函数在其他地方调用的话,会获取错误!
//假设文件名为load.js
var filename = "load.js";
// 根据相对路径获取绝对路径
function getPath(relativePath, absolutePath){
var reg = new RegExp("\.\./","g");
var upCount = 0; // 相对路径中返回上层的次数。
var m = relativePath.match(reg);
if(m) upCount = m.length;
var lastIndex = absolutePath.length-1;
for(var i=0;i<=upCount;i++){
lastIndex = absolutePath.lastIndexOf("/",lastIndex);
}
return absolutePath.substr(0,lastIndex+1) + relativePath.replace(reg,"");
}
// 获取当前文件绝对路径
function getAbsolutePath() {
var scripts = document.getElementsByTagName('script');
var script = null;
var len = scripts.length;
for(var i = 0; i < scripts.length; i++) {
if(scripts[i].src.indexOf(filename) != -1) {
script = scripts[i];
break;
}
}
if(script) {
var src = script.src;
// 不是绝对路径需要修正
if(src.indexOf("http://") != 0 && src.indexOf("/") != 0){
var url = location.href;
var index = url.indexOf("?");
if(index != -1){
url = url.substring(0, index-1);
}
src = getPath(src,url);
}
return src;
}
return null;
}
window.onload = function() {
var path = getAbsolutePath()
alert("当前的js文件路径:"+path);
var dirpath = path.substr(0, path.lastIndexOf("/"));
alert("上一级路径:"+getPath("../", dirpath));
alert("相对路径 ../images/lightbox-ico-loading.gif 路径:"+getPath("../images/lightbox-ico-loading.gif", dirpath));
}