91 votes

Chemins relatifs en Javascript dans un fichier externe

J'exécute donc ce javascript, et tout fonctionne bien, sauf les chemins vers l'image d'arrière-plan. Il fonctionne dans mon environnement local ASP.NET Dev, mais il ne fonctionne PAS lorsqu'il est déployé sur un serveur dans un répertoire virtuel.

C'est dans un fichier .js externe, la structure du dossier est la suivante

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

alors c'est ici que le fichier js est inclus à partir

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

J'ai essayé d'utiliser '/Images/filters_collapse.jpg' et cela ne fonctionne pas non plus ; cependant, cela semble fonctionner sur le serveur si j'utilise '../../Images/filters_collapse.jpg' .

En fait, je veux avoir la même fonctionnalité que le tilda d'ASP.NET ~ .

mise à jour

Les chemins des fichiers .js externes sont-ils relatifs à la page dans laquelle ils sont inclus ou à l'emplacement réel du fichier .js ?

143voto

Juraj Blahunka Points 5620

Chemins des fichiers JavaScript

Quand dans script, les chemins sont relatifs à la page affichée

Pour faciliter les choses, vous pouvez imprimer une simple déclaration js comme celle-ci et utiliser cette variable dans tous vos scripts :

Solution, qui a été employée sur StackOverflow autour de Feb 2010 :

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

Si vous visitiez cette page vers 2010, vous pourriez jeter un coup d'œil à La source html de StackOverflow vous pouvez trouver cette phrase qui déchire [formatée en 3 lignes :) ] dans la section <head /> section

48voto

schory Points 349

obtenir l'emplacement de votre fichier javascript pendant l'exécution en utilisant jQuery en analysant le DOM à la recherche de l'attribut 'src' qui y fait référence :

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

(en supposant que votre fichier javascript s'appelle 'example.js')

27voto

PHPst Points 2929

Une bonne solution consiste à utiliser une classe css au lieu d'écrire src dans le fichier js. Par exemple, au lieu d'utiliser :

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

utiliser :

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

et dans un fichier css qui est chargé lors de l'écriture de la page :

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

14voto

Pekka 웃 Points 249607

Bonne question.

  • Lorsqu'elles se trouvent dans un fichier CSS, les URL seront relatives au fichier CSS.

  • Lorsque vous écrivez des propriétés à l'aide de JavaScript, les URL doivent toujours être relatives à la page (la principale ressource demandée).

Il n'y a pas tilde fonctionnalité intégrée dans JS que je sache. La méthode habituelle consiste à définir une variable JavaScript spécifiant le chemin de base :

<script type="text/javascript">

  directory_root = "http://www.example.com/resources";

</script> 

et de faire référence à cette racine chaque fois que vous attribuez des URL de manière dynamique.

4voto

takepara Points 5965

J'ai utilisé le modèle de Pekka. Je crois que c'est encore un autre modèle.

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

et la chaîne de requête analysée dans monjsfile.js.

Plugins | Plugins jQuery

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X