Setting background-image with javascript

2020-04-08 11:41发布

In chrome, safari, and opera setting the background image to an absolute reference such as: "/images/image.png" changes it to "http://sitepath/images/image.png".

It does not do this in firefox.

Is there any way to avoid this behavior, or is it written into the browser's javascript engine? Using jquery to set the background-image also does this problem.

The problem is that I am posting the HTML to a php script that needs the urls in this specific format. I know that setting the image path relative fixes this, but I can't do that.

The only other alternative would be to use a regexp. to convert the urls.

Thanks.

Test this in firefox, and chrome / webkit browser:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<div style="height:400px;width:400px;background-image:url(/images/images/logo.gif);">
</div>
<br />
<br />
<div id="test" style="height:400px;width:400px;">
</div>
<script type="text/javascript" src="/javascripts/jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#test").css('background-image',"url(/images/images/logo.gif)");
        alert(document.getElementById('test').style.backgroundImage);
    });
</script>
</body>
</html>

3条回答
smile是对你的礼貌
2楼-- · 2020-04-08 12:29
$('#divID').css("background-image", "url(/myimage.jpg)");  
查看更多
▲ chillily
3楼-- · 2020-04-08 12:31

Not sure exacly how you're putting that location into the document, but you can use window.location.hostname to get the domain and prepend that.

var bgImg = window.location.hostname + '/images/images/logo.gif';
$("#test").css('background-image', 'url('+bgImg+')');

You would replace /images/images/logo.gif with however you generate the image (server-side, I guess?)

查看更多
放我归山
4楼-- · 2020-04-08 12:39

A better approach would be to change classes on the item such that the new class changed the image to whatever you wanted. Something like:

$("#test").addClass("newClass");

This is a much cleaner approach that will degrade better and allow proper separation of concerns.

If you have to stick with changing inline CSS, you'll have to use an absolute reference to keep it the same in all browsers.

$("#test").css("background", "url(" + window.location.hostname + "/logo.gif)");
查看更多
登录 后发表回答