Ścieżki względne w Javascript w zewnętrznym pliku
Więc uruchamiam ten javascript, i wszystko działa dobrze, z wyjątkiem ścieżek do obrazu tła. Działa na moim lokalnym ASP.NET środowiska Dev, ale nie działa po wdrożeniu na serwerze w katalogu wirtualnym.
To jest zewnętrzne .plik js, struktura folderów to
Site/Content/style.css
Site/Scripts/myjsfile.js
Site/Images/filters_expand.jpg
Site/Images/filters_colapse.jpg
Wtedy plik js jest dołączany z
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')");
}
});
Próbowałem użyć '/Images/filters_collapse.jpg'
i to też nie działa; jednak wydaje się, że działa na serwerze, jeśli używam '../../Images/filters_collapse.jpg'
.
W zasadzie chcę mieć taką samą funkcjonalność jak ASP.NET tilda -- ~
.
Update
Są ścieżkami zewnętrznymi .Pliki js względem strony, w której są zawarte, lub rzeczywistej lokalizacji .akta js?
10 answers
Ścieżki plików JavaScript
Gdy w skrypcie, ścieżki są względem wyświetlanej strony
Aby było łatwiej, możesz wydrukować prostą deklarację js, taką jak ta i używać tej zmiennej we wszystkich skryptach:
Rozwiązanie, które zostało zastosowane na StackOverflow około lutego 2010:
<script type="text/javascript">
var imagePath = 'http://sstatic.net/so/img/';
</script>
Jeśli odwiedzasz tę stronę około 2010 roku, możesz po prostu spojrzeć na źródło HTML StackOverflow , Możesz znaleźć ten badass one-liner [sformatowany do 3 linijek :) ] w sekcji <head />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 07:44:49
Uzyskaj lokalizację pliku javascript podczas uruchamiania za pomocą jQuery, analizując DOM dla atrybutu 'src', który go odnosił:
var jsFileLocation = $('script[src*=example]').attr('src'); // the js file path
jsFileLocation = jsFileLocation.replace('example.js', ''); // the js folder path
(zakładając, że Twój plik javascript ma nazwę ' example.js")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-14 15:18:01
Właściwym rozwiązaniem jest użycie klasy css zamiast zapisu src w pliku js. Na przykład zamiast używać:
$(this).css("background", "url('../Images/filters_collapse.jpg')");
Użycie:
$(this).addClass("xxx");
I w pliku css, który jest ładowany na stronie napisz:
.xxx {
background-image:url('../Images/filters_collapse.jpg');
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-17 08:33:23
Dobre pytanie.
Gdy w pliku CSS, adresy URL będą względne do pliku CSS.
Podczas pisania właściwości przy użyciu JavaScript, adresy URL powinny być zawsze względne do strony (główny zasób żądany).
Nie ma wbudowanej funkcjonalności tilde
W JS, o której wiem. Standardowym sposobem byłoby zdefiniowanie zmiennej JavaScript określającej ścieżkę bazową:
<script type="text/javascript">
directory_root = "http://www.example.com/resources";
</script>
I odwoływać się do tego roota za każdym razem, gdy przypisujesz adresy URL dynamicznie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-02 23:09:23
Użyłem wzoru pekki. Myślę, że kolejny wzór.
<script src="<% = Url.Content("~/Site/Scripts/myjsfile.js") %>?root=<% = Page.ResolveUrl("~/Site/images") %>">
I parsed querystring in myjsfile.js.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 16:16:04
Dla aplikacji MVC4, nad którą pracuję, umieściłem element skryptu w _Layout.cshtml i stworzył globalną zmienną dla wymaganej ścieżki, w ten sposób:
<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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-27 02:02:54
Proszę użyć następującej składni, aby cieszyć się luksusem asp.net tilda ( " ~ " ) w javascript
<script src=<%=Page.ResolveUrl("~/MasterPages/assets/js/jquery.js")%>></script>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-26 03:18:08
Okazało się, że to działa dla mnie.
<script> document.write(unescape('%3Cscript src="' + window.location.protocol + "//" +
window.location.host + "/" + 'js/general.js?ver=2"%3E%3C/script%3E'))</script>
Między znacznikami skryptu oczywiście... (Nie jestem pewien, dlaczego znaczniki skryptu nie pojawiły się w tym poście)...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-02 14:59:12
Musisz dodać runat="server"
i przypisać ID dla niego, a następnie określić ścieżkę bezwzględną w następujący sposób:
<script type="text/javascript" runat="server" id="myID" src="~/js/jquery.jqGrid.js"></script>]
Z kodu można zmienić program src używając ID.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-20 12:23:35
To działa dobrze w ASP.NET webforms.
Zmień skrypt na
<img src="' + imagePath + 'chevron-large-right-grey.gif" alt="'.....
Mam stronę wzorcową dla każdego poziomu katalogu i jest to w zdarzeniu 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)
Teraz niezależnie od tego, czy aplikacja jest uruchomiona lokalnie, czy wdrożona, otrzymasz prawidłową pełną ścieżkę
http://localhost:57387/Images/chevron-large-left-blue.png
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-02 02:42:26