Относительные пути в Javascript во внешнем файле
Итак, я запускаю этот javascript, и все работает нормально, кроме путей к фоновому изображению. Он работает на моем местном ASP.NET среда разработки, но она не работает при развертывании на сервере в виртуальном каталоге.
это во внешнем .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'.
в принципе, я хочу иметь ту же функциональность, что и ASP.NET Тильда--~.
обновление
являются пути во внешнем .файлы js относительно страницы, в которую они включены, или фактического местоположения .js файл?
10 ответов:
пути к файлам JavaScript
когда в скрипт пути относительно отображаемой страницы
чтобы упростить работу, вы можете распечатать простое объявление js, подобное этому, и использовать эту переменную во всех ваших скриптах:
решение, которое было использовано на StackOverflow около февраля 2010 года:
<script type="text/javascript"> var imagePath = 'http://sstatic.net/so/img/'; </script>если вы посещали эту страницу около 2010 года, вы могли бы просто взглянуть на html-источник StackOverflow, вы можете найти этот задира однострочный [отформатированный до 3 строк :)] в
<head />раздел
получите местоположение вашего файла javascript во время выполнения с помощью jQuery, проанализировав DOM для атрибута 'src', который его назвал:
var jsFileLocation = $('script[src*=example]').attr('src'); // the js file path jsFileLocation = jsFileLocation.replace('example.js', ''); // the js folder path(предполагая, что ваш файл javascript называется ' пример.js')
правильное решение-использовать класс css вместо записи src в JS-файл. Например, вместо использования:
$(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-адреса всегда должны быть относительно страницы (основного запрашиваемого ресурса).
нет
tildeфункциональность встроенный в JS, что я знаю. Обычным способом было бы определить переменную JavaScript, указывающую базовый путь:<script type="text/javascript"> directory_root = "http://www.example.com/resources"; </script>и ссылаться на это корень всякий раз, когда вы назначаете URL-адреса динамически.
я использовал шаблон Пекки. Думаю, еще одна закономерность.
<script src="<% = Url.Content("~/Site/Scripts/myjsfile.js") %>?root=<% = Page.ResolveUrl("~/Site/images") %>">и проанализировал строку запроса в myjsfile.js.
для приложения 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>
пожалуйста, используйте следующий синтаксис, чтобы насладиться роскошью asp.net Тильда ( " ~ " ) в javascript
<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"и чтобы присвоить ему идентификатор, укажите абсолютный путь следующим образом:
<script type="text/javascript" runat="server" id="myID" src="~/js/jquery.jqGrid.js"></script>]от codebehind, вы можете изменить src программно с помощью идентификатора.
Это хорошо работает в ASP.NET веб-формы.
изменить скрипт
<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
Comments