Javascript中的相对路径在外部文件中

Nat*_*ate 79 html javascript css asp.net-mvc path

所以我正在运行这个javascript,一切正常,除了背景图片的路径.它适用于我的本地ASP.NET Dev环境,但在部署到虚拟目录中的服务器时不起作用.

这是在外部.js文件中,文件夹结构是

Site/Content/style.css
Site/Scripts/myjsfile.js
Site/Images/filters_expand.jpg
Site/Images/filters_colapse.jpg
Run Code Online (Sandbox Code Playgroud)

那么这就是包含js文件的地方

Site/Views/ProductList/Index.aspx

$("#toggle").click(function() {
    if (left.width() > 0) {
        AnimateNav(left, right, 0);
        $(this).css("background", "url('../Images/filters_expand.jpg')");
    }
    else {
        AnimateNav(left, right, 170);
        $(this).css("background", "url('../Images/filters_collapse.jpg')");
    }
});
Run Code Online (Sandbox Code Playgroud)

我尝试过使用'/Images/filters_collapse.jpg',但也无效; 但是,如果我使用它似乎在服务器上工作'../../Images/filters_collapse.jpg'.

基本上,我想要与ASP.NET tilda具有相同的功能 - ~.

更新

外部.js文件中的路径是相对于它们所包含的页面还是.js文件的实际位置?

Jur*_*nka 131

JavaScript文件路径

在脚本中,路径相对于显示的页面

为了使事情变得更容易,你可以打印出这样一个简单的js声明,并在你的脚本中使用这个变量:

解决方案,在2010年2月左右在StackOverflow上使用:

<script type="text/javascript">
   var imagePath = 'http://sstatic.net/so/img/';
</script>
Run Code Online (Sandbox Code Playgroud)

如果您在2010年左右访问此页面,您可以查看StackOverflow的html源代码,您可以在该<head />部分找到这个badass单行[格式化为3行:)]

  • 我最终这样做,除了我使用Url.Content为`imagePath生成值.谢谢! (7认同)
  • 我使用`Url.Content("〜")`来获取_Application_ root.心连心 (7认同)
  • 我也喜欢`var imagePath = window.location.protocol +"//"+ window.location.host +"/"` (3认同)
  • 哈哈,我做了同样的事情,然后回来阅读你的评论。 (2认同)

小智 46

通过解析DOM引用它的'src'属性,在运行时使用jQuery获取javascript文件的位置:

var jsFileLocation = $('script[src*=example]').attr('src');  // the js file path
jsFileLocation = jsFileLocation.replace('example.js', '');   // the js folder path
Run Code Online (Sandbox Code Playgroud)

(假设您的javascript文件名为'example.js')

  • 非常好的答案.我将`.replace`表达式更改为`jsFileLocation.replace(/example\.js.*$ /,'')`,以防查询字符串像`.js之后的版本号一样 (6认同)

PHP*_*Pst 27

一个合适的解决方案是使用css类而不是在js文件中编写src.例如,而不是使用:

$(this).css("background", "url('../Images/filters_collapse.jpg')");
Run Code Online (Sandbox Code Playgroud)

使用:

$(this).addClass("xxx");
Run Code Online (Sandbox Code Playgroud)

并在页面中加载的css文件中写入:

.xxx {
  background-image:url('../Images/filters_collapse.jpg');
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我使用非css属性,这不起作用.例如:`<img rel="nofollow noreferrer" src ="/ codes/imgs/a.png">`.我无法通过css设置此src属性. (5认同)

Pek*_*ica 13

好问题.

  • 在CSS文件中,URL将相对于CSS文件.

  • 使用JavaScript编写属性时,URL应始终相对于页面(请求的主要资源).

tilde我所知道的JS中没有内置的功能.通常的方法是定义一个指定基本路径的JavaScript变量:

<script type="text/javascript">

  directory_root = "http://www.example.com/resources";

</script> 
Run Code Online (Sandbox Code Playgroud)

并在动态分配URL时引用该根.

  • 硬编码根不适用于您的开发箱,测试服务器等. (13认同)

小智 5

对于我正在处理的MVC4应用程序,我在_Layout.cshtml中放置了一个脚本元素,并为所需的路径创建了一个全局变量,如下所示:

<body>

<script>
    var templatesPath = "@Url.Content("~/Templates/")";
</script>

<div class="page">
    <div id="header">

       <span id="title">

        </span>
    </div>
    <div id="main">


        @RenderBody()
    </div>
    <div id="footer">
        <span></span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)