获取相对CSS URL路径的Javascript

问题描述:

注:我终于找到一个确切的重复问题,很好的答案在:Get script path获取相对CSS URL路径的Javascript

我相对于我的CSS文件的路径定义的背景图片。

.my-image-class { 
    background-image: url("../images/my_bg_image.png"); 
} 

我想改变在JavaScript中这条道路,使其现在指向../images/my_updated_bg_image.png。然而,简单地改变JavaScript中的样式声明不幸地改变了从CSS位置到HTML位置的相对路径的含义。

有没有办法从相对的CSS网址中提取绝对网址?

如果不是有没有办法提取当前运行的JavaScript函数源的绝对URL?这会给我相同的信息,因为我的JS文件也是相对于图像文件。

其他解决方案?

这是一个类似javascript - How to use a image file relative to a url path?的问题,但类交换技巧暗示这不适合我,因为我实际上有一个这些背景图像的变量列表。

编辑:背景信息。 Web应用程序(基于Django)完全独立于静态js,image和css文件提供HTML内容。静态内容在

static/ 
    js/ 
    css/ 
    images/ 

文件结构。所以我知道这些文件之间的相对关系。但是,HTML内容和静态内容的绝对URL可能会发生变化。所以我不希望混合HTML内容的硬编码URL到我的js文件中,如果我可以避免的话。我从第三方获取Django模板,所以我也想避免编辑它。

+0

不太清楚你的意思是“我的JS文件也是相对于图像文件”,但是有一个原因,为什么给定的脚本不知道它试图交换的图像的绝对路径?为什么给定位的JS代码需要相对引用一个图像?你总是可以使用'document.URL'来找出网站的根目录,你应该从那里知道脚本的内容。 – 2011-04-03 17:33:32

+0

查看已添加的背景信息。希望这回答你的问题。感谢您的关注。 – mjhm 2011-04-03 18:29:08

+0

好的 - 我对Django的体系结构一无所知,但我假设某些*知道给定内容树的根目录。在asp.net中,为了支持虚拟目录,我只需要让服务器渲染类似'app.rootUrl ='/ vdir /''的东西,并且每当我需要知道我在JS中的位置时使用它。我希望它不需要那么简单,但每个页面上额外的20个字符可以节省很多头疼:) – 2011-04-03 18:33:58

CSS样式表中的URL与它们出现的CSS文件相关(即使@import ed也是如此)。如果它们以HTML格式显示,则它们与HTML文件的基本URL(通常为HTML文件的URL)相关,除非HTML中有一个<base href=...>元素。

所以你需要找出解析相对URL的绝对URL,然后计算图像的相对URL。

您可能会尝试查看是否从多个不同位置提供旧图像。许多网络服务器累积了大量的垃圾,也许你只是把新形象放在一个合乎逻辑但仍然错误的地方。

编辑:

有绝对和相对路径../foo风格URL之间的各种选项。

绝对路径:/images/myImage.png

协议相对URL://my-domain.com/image/myImage.png这些

要么可能让你指定罢工就像你的需要,但没有更多更好的平衡。

+0

查看已添加的背景信息。希望它能让我更清楚自己在做什么。 – mjhm 2011-04-03 18:30:12

+0

@mjhm,编辑。希望这可以帮助。 – 2011-04-03 18:51:35

+0

对不起,不完全是我以后。 CSS,图像和js都是相对于彼此服务的,所以在我完美的(可能是童话故事的)世界中,应该有一种方式让js浏览css和图像路径,而不必事先知道任何关于绝对路径或任何其他公用目录结构之外的东西。 – mjhm 2011-04-03 23:19:17