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