Ich führe also dieses Javascript aus und alles funktioniert einwandfrei, außer den Pfaden zum Hintergrundbild. Es funktioniert in meiner lokalen ASP.NET Dev-Umgebung, aber NICHT, wenn es auf einem Server in einem virtuellen Verzeichnis bereitgestellt wird.
Dies ist in einer externen .js-Datei, Ordnerstruktur ist
Site/Content/style.css
Site/Scripts/myjsfile.js
Site/Images/filters_expand.jpg
Site/Images/filters_colapse.jpg
dann ist hier die js-Datei enthalten
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')");
}
});
Ich habe es versucht '/Images/filters_collapse.jpg'
und das funktioniert auch nicht. Es scheint jedoch auf dem Server zu funktionieren, wenn ich benutze '../../Images/filters_collapse.jpg'
.
Grundsätzlich möchte ich die gleiche Funktionalität wie die ASP.NET-Tilda haben ~
.
aktualisieren
Beziehen sich Pfade in externen JS-Dateien auf die Seite, in der sie enthalten sind, oder auf den tatsächlichen Speicherort der JS-Datei?
quelle
Antworten:
JavaScript-Dateipfade
Im Skript beziehen sich die Pfade auf die angezeigte Seite
Zur Vereinfachung können Sie eine einfache js-Deklaration wie diese ausdrucken und diese Variable in allen Skripten verwenden:
Lösung, die im Februar 2010 bei StackOverflow eingesetzt wurde :
Wenn Sie diese Seite um 2010 besucht haben, können Sie sich einfach die HTML-Quelle von StackOverflow ansehen. Sie finden diesen Badass-Einzeiler [formatiert auf 3 Zeilen :)] im
<head />
Abschnittquelle
imagePath.
Danke zu generieren !Url.Content("~")
das Anwendungsstammverzeichnis erhalten . hthvar imagePath = window.location.protocol + "//" + window.location.host + "/"
Ermitteln Sie den Speicherort Ihrer Javascript-Datei zur Laufzeit mithilfe von jQuery, indem Sie das DOM nach dem Attribut 'src' analysieren, auf das es verwiesen hat:
(Angenommen, Ihre Javascript-Datei heißt 'example.js')
quelle
.replace
AusdruckjsFileLocation.replace(/example\.js.*$/, '')
in ändern , falls es eine.js
Eine geeignete Lösung ist die Verwendung einer CSS-Klasse, anstatt src in die js-Datei zu schreiben. Zum Beispiel anstatt zu verwenden:
verwenden:
und in eine CSS-Datei, die auf der Seite geladen ist, schreiben Sie:
quelle
<img src="/codes/imgs/a.png">
. Ich kann dieses src-Attribut nicht per CSS festlegen.Gute Frage.
In einer CSS-Datei sind URLs relativ zur CSS-Datei.
Beim Schreiben von Eigenschaften mit JavaScript sollten URLs immer relativ zur Seite sein (die angeforderte Hauptressource).
tilde
In JS ist keine Funktionalität integriert, die mir bekannt ist. Der übliche Weg wäre, eine JavaScript-Variable zu definieren, die den Basispfad angibt:und auf diesen Stamm zu verweisen, wenn Sie URLs dynamisch zuweisen.
quelle
Für die MVC4-App, an der ich arbeite, habe ich ein Skriptelement in _Layout.cshtml eingefügt und eine globale Variable für den erforderlichen Pfad erstellt, wie folgt:
quelle
Ich habe Pekkas Muster verwendet. Ich denke noch ein Muster.
und analysierte Querystring in myjsfile.js.
Plugins | jQuery-Plugins
quelle
Bitte verwenden Sie die folgende Syntax, um den Luxus von asp.net tilda ("~") in Javascript zu genießen
quelle
Ich fand das für mich zu arbeiten.
zwischen Skript-Tags natürlich ... (Ich bin nicht sicher, warum die Skript-Tags in diesem Beitrag nicht angezeigt wurden) ...
quelle
Sie müssen
runat="server"
eine ID hinzufügen und zuweisen und dann den absoluten Pfad wie folgt angeben:<script type="text/javascript" runat="server" id="myID" src="~/js/jquery.jqGrid.js"></script>]
Über den Codebehind können Sie den src mithilfe der ID programmgesteuert ändern.
quelle
Dies funktioniert gut in ASP.NET-Webformularen.
Ändern Sie das Skript in
Ich habe eine Masterseite für jede Verzeichnisebene und diese befindet sich im Ereignis PageInit
Unabhängig davon, ob die Anwendung lokal ausgeführt oder bereitgestellt wird, erhalten Sie jetzt den richtigen vollständigen Pfad
quelle