Relatieve paden in Javascript in een extern bestand

Dus ik gebruik dit javascript en alles werkt prima, behalve de paden naar de achtergrondafbeelding. Het werkt op mijn lokale ASP.NET Dev-omgeving, maar het werkt NIET wanneer het is geïmplementeerd op een server in een virtuele map.

Dit staat in een extern .js-bestand, de mappenstructuur is

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

dan is dit waar het js-bestand vandaan komt

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')");
    }
});

Ik heb geprobeerd '/Images/filters_collapse.jpg'te gebruiken en dat werkt ook niet; het lijkt echter te werken op de server als ik '../../Images/filters_collapse.jpg'gebruik.

In principe wil ik dezelfde functionaliteit hebben als de ASP.NET tilda — ~.

bijwerken

Zijn paden in externe .js-bestanden relatief ten opzichte van de pagina waarin ze zijn opgenomen, of de werkelijke locatie van het .js-bestand?


Antwoord 1, autoriteit 100%

JavaScript-bestandspaden

In het script zijn paden relatief ten opzichte van de weergegeven pagina

om het u gemakkelijker te maken, kunt u een eenvoudige js-declaratie zoals deze afdrukken en deze variabele in al uw scripts gebruiken:

Oplossing, die rond februari 2010 werd gebruikt op StackOverflow:

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

Als u deze pagina rond 2010 bezoekt, kunt u gewoon kijken naar StackoverFlow’s HTML-bron , u kunt deze badass one-liner [geformatteerd naar 3 regels :)] in de <head />SECTIE


Antwoord 2, Autoriteit 35%

Verkrijg de locatie van uw JavaScript-bestand tijdens het uitvoeren van tijd met jQuery door de DOM te parseren voor het ‘SRC’-attribuut dat het heeft verwezen:

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

(Aangenomen van uw JavaScript-bestand heet ‘example.js’)


Antwoord 3, Autoriteit 20%

Een juiste oplossing gebruikt een CSS-klasse in plaats van SRC in JS-bestand te schrijven.
Bijvoorbeeld in plaats van te gebruiken:

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

Gebruik:

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

en in een CSS-bestand dat in de pagina is geladen:

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

Antwoord 4, Autoriteit 10%

Goede vraag.

  • Wanneer in een CSS-bestand URL’s zijn ten opzichte van het CSS-bestand.

  • Bij het schrijven van eigenschappen met JavaScript moet URL’s altijd relatief zijn aan de pagina (de aangevraagde resource).

Voor zover ik weet is er geen tilde-functionaliteit ingebouwd in JS. De gebruikelijke manier is om een JavaScript-variabele te definiëren die het basispad specificeert:

<script type="text/javascript">
  directory_root = "http://www.example.com/resources";
</script> 

en om naar die root te verwijzen wanneer je dynamisch URL’s toewijst.


Antwoord 5, autoriteit 4%

Voor de MVC4-app waar ik aan werk, heb ik een scriptelement in _Layout.cshtml geplaatst en een globale variabele gemaakt voor het vereiste pad, zoals:

<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>


Antwoord 6, autoriteit 3%

Ik heb het patroon van Pekka gebruikt.
Ik denk nog een ander patroon.

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

en querystring in myjsfile.js geparseerd.

Plug-ins | jQuery-plug-ins


Antwoord 7

Gebruik de volgende syntaxis om te genieten van de luxe van asp.net tilda (“~”) in javascript

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

Antwoord 8

Ik merkte dat dit voor mij werkte.

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

natuurlijk tussen scripttags… (ik weet niet zeker waarom de scripttags niet in dit bericht werden weergegeven)…


Antwoord 9

Je moet runat="server"en en toevoegen om er een ID aan toe te kennen, en dan het absolute pad als volgt specificeren:

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

Vanuit de codeachter kunt u de src programmatisch wijzigen met behulp van de ID.


Antwoord 10

Dit werkt goed in ASP.NET-webformulieren.

Wijzig het script in

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

Ik heb een hoofdpagina voor elk directoryniveau en dit is in de Page_Init-gebeurtenis

 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)

Ongeacht of de applicatie lokaal wordt uitgevoerd of geïmplementeerd, u krijgt nu het juiste volledige pad

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

Other episodes