Relative Paths in Javascript in an external file
所以我运行这个javascript,除了到背景图像的路径之外,一切都正常。它在本地ASP.NET开发环境中工作,但部署到虚拟目录中的服务器时不工作。
这在外部.js文件中,文件夹结构为
1 2 3 4 | Site/Content/style.css Site/Scripts/myjsfile.js Site/Images/filters_expand.jpg Site/Images/filters_colapse.jpg |
这就是包含JS文件的地方
1 2 3 4 5 6 7 8 9 10 11 12 | 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')"); } }); |
我试过使用
基本上,我希望具有与ASP.NET Tilda相同的功能——
更新
外部.js文件中的路径是相对于包含它们的页面的路径,还是相对于.js文件的实际位置的路径?
javascript文件路径
在脚本中,路径相对于显示的页面
为了使操作更简单,您可以打印出这样一个简单的JS声明,并在整个脚本中使用该变量:
解决方案,在2010年2月左右用于StackOverflow:
1 2 | <script type="text/javascript"> var imagePath = 'http://sstatic.net/so/img/'; |
如果你在2010年左右访问这个页面,你可以看看stackoverflow的HTML源代码,你可以在
通过分析引用javascript文件的"src"属性的dom,在运行时使用jquery获取该文件的位置:
1 2 | var jsFileLocation = $('script[src*=example]').attr('src'); // the js file path jsFileLocation = jsFileLocation.replace('example.js', ''); // the js folder path |
(假设您的javascript文件名为'example.js')
正确的解决方案是使用CSS类而不是在JS文件中写入SRC。例如,不使用:
1 | $(this).css("background","url('../Images/filters_collapse.jpg')"); |
用途:
1 | $(this).addClass("xxx"); |
在加载到页面的CSS文件中写入:
1 2 3 | .xxx { background-image:url('../Images/filters_collapse.jpg'); } |
问得好。
当在CSS文件中时,URL将相对于CSS文件。
使用javascript编写属性时,URL应该始终相对于页面(请求的主资源)。
据我所知,JS中没有内置的
1 2 3 | <script type="text/javascript"> directory_root ="http://www.example.com/resources"; |
并在动态分配URL时引用该根。
对于我正在开发的MVC4应用程序,我在Layout.cshtml中放置了一个脚本元素,并为所需路径创建了一个全局变量,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <body> var templatesPath ="@Url.Content("~/Templates/")"; <span id="title"> </span> @RenderBody() <span></span> |
我用了佩卡的图案。我想还有另一种模式。
1 | <script src="<% = Url.Content("~/Site/Scripts/myjsfile.js") %>?root=<% = Page.ResolveUrl("~/Site/images") %>"> |
并在myjsfile.js中解析了querystring。
插件jquery插件
我发现这个对我有用。
1 2 | document.write(unescape('%3Cscript src="' + window.location.protocol +"//" + window.location.host +"/" + 'js/general.js?ver=2"%3E%3C/script%3E')) |
当然,在脚本标记之间…(我不知道为什么脚本标签没有出现在这篇文章中)……
请使用以下语法享受javascript中ASP.NET tilda("~")的奢华。
1 | <script src=<%=Page.ResolveUrl("~/MasterPages/assets/js/jquery.js")%>> |
这在ASP.NET Web窗体中工作得很好。
将脚本更改为
1 | <img src="' + imagePath + 'chevron-large-right-grey.gif" alt="'..... |
我为每个目录级别都有一个母版页,这在页面初始化事件中
1 2 3 4 | Dim vPath As String = ResolveUrl("~/Images/") Dim SB As New StringBuilder SB.Append("var imagePath = '" & vPath &"';") ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(),"LoadImagePath", SB.ToString, True) |
现在,无论应用程序是在本地运行还是部署,您都可以得到正确的完整路径。
1 | http://localhost:57387/Images/chevron-large-left-blue.png |
您需要添加