簡體   English   中英

外部文件中Javascript中的相對路徑

[英]Relative Paths in Javascript in an external file

所以我正在運行這個 javascript,一切正常,除了背景圖像的路徑。 它適用於我的本地 ASP.NET Dev 環境,但在部署到虛擬目錄中的服務器時它不起作用。

這是在一個外部 .js 文件中,文件夾結構是

Site/Content/style.css
Site/Scripts/myjsfile.js
Site/Images/filters_expand.jpg
Site/Images/filters_colapse.jpg

那么這是包含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')");
    }
});

我試過使用'/Images/filters_collapse.jpg' ,但也不管用; 但是,如果我使用'../../Images/filters_collapse.jpg' ,它似乎可以在服務器上'../../Images/filters_collapse.jpg'

基本上,我希望具有與 ASP.NET tilda 相同的功能 -- ~

更新

外部 .js 文件中的路徑是相對於包含它們的頁面還是 .js 文件的實際位置?

JavaScript 文件路徑

在腳本中時,路徑是相對於顯示頁面的

為了讓事情更容易,你可以打印出一個簡單的 js 聲明,並在你的腳本中使用這個變量:

2010 年 2 月左右在StackOverflow 上使用的解決方案:

<script type="text/javascript">
   var imagePath = 'http://sstatic.net/so/img/';
</script>

如果您在 2010 年左右訪問此頁面,您可以查看StackOverflow 的 html 源代碼,您可以在<head />部分找到這個糟糕的單行 [格式化為 3 行 :)]

通過解析引用它的 'src' 屬性的 DOM,在運行時使用 jQuery 獲取 javascript 文件的位置:

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。 例如,而不是使用:

$(this).css("background", "url('../Images/filters_collapse.jpg')");

用:

$(this).addClass("xxx");

並在頁面中加載的 css 文件中寫入:

.xxx {
  background-image:url('../Images/filters_collapse.jpg');
}

好問題。

  • 在 CSS 文件中時,URL 將相對於 CSS 文件。

  • 使用 JavaScript 編寫屬性時,URL 應始終與頁面(請求的主要資源)相關。

我所知道的 JS 中沒有內置tilde功能。 通常的方法是定義一個 JavaScript 變量來指定基本路徑:

<script type="text/javascript">

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

</script> 

並在您動態分配 URL 時引用該根。

對於我正在處理的 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>

我使用了 pekka 的模式。 我認為還有另一種模式。

<script src="<% = Url.Content("~/Site/Scripts/myjsfile.js") %>?root=<% = Page.ResolveUrl("~/Site/images") %>">

並在 myjsfile.js 中解析查詢字符串。

插件 | jQuery 插件

請使用以下語法在 javascript 中享受 asp.net tilda ("~") 的奢華

<script src=<%=Page.ResolveUrl("~/MasterPages/assets/js/jquery.js")%>></script>

我發現這對我有用。

    <script> document.write(unescape('%3Cscript src="' + window.location.protocol + "//" +     
    window.location.host + "/" + 'js/general.js?ver=2"%3E%3C/script%3E'))</script>

當然在腳本標簽之間......(我不確定為什么腳本標簽沒有出現在這篇文章中)......

您需要添加runat="server"並為其分配一個 ID,然后像這樣指定絕對路徑:

<script type="text/javascript" runat="server" id="myID" src="~/js/jquery.jqGrid.js"></script>]

在代碼隱藏中,您可以使用 ID 以編程方式更改 src。

這在 ASP.NET webforms 中運行良好。

將腳本更改為

<img src="' + imagePath + 'chevron-large-right-grey.gif" alt="'.....

我有每個目錄級別的母版頁,這是在 Page_Init 事件中

  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)

現在無論應用程序是在本地運行還是部署,您都會獲得正確的完整路徑

http://localhost:57387/Images/chevron-large-left-blue.png

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM