使用jQuery CSS属性设置背景图像


377

我在一个imageUrl变量中有一个图像URL,我正在尝试使用jQuery将其设置为CSS样式:

$('myObject').css('background-image', imageUrl);

这似乎不起作用,因为:

console.log($('myObject').css('background-image'));

返回none

任何想法,我在做什么错?


1
到底是什么问题?jQuery抛出错误吗?
Mike_G,

不,它的设置不正确。我正在记录它,并且它没有改变。
Blankman

2
jQuery第一次不尝试猜测用户的意思。
gblazex 2011年

Answers:


924

您可能想要这样做(使其像普通的CSS背景图像声明一样):

$('myObject').css('background-image', 'url(' + imageUrl + ')');

我是这样做的-但是'url'和左括号之间的空格导致我的代码失败。复制/粘贴您的内容并意识到问题。谢谢!
pmartin

我在此脚本中使用了您的代码,但得到了背景图片:url((unknown)); 这是我的脚本:var bg_img = jQuery('。wp-show-posts-inner')。attr('data-src'); jQuery('。wp-show-posts-inner')。on('mouseover',function(){jQuery('。home-banner .bg')。css('background-image','url('+ bg_img) +')');}); 知道为什么吗?
加斯顿·科洛

71

您需要像这样在imageUrl前后加上双引号(“):

$('myOjbect').css('background-image', 'url("' + imageUrl + '")');

这样,如果图像中有空格,它将仍然被设置为属性。


6
在这种情况下,应该是$('myObject').css('background-image', 'url(' + encodeURIComponent(imageUrl) + ')');
Arosboro


这为我解决了。我需要加双引号。我的图像名称确实包含空格。否则,将不会发生任何事情。我可以得到一些$('.myObject').css('background-color', 'green'); 可以工作的东西,但是没有双引号就不能更改图像。谢谢!
Ghost Echo

1
encodeURIComponent如果您的网址的一部分已经包含网址转义字符,则无法使用。不过,您应该在imageUrl中转义潜在的双引号字符:$('myObject').css('background-image', 'url("' + imageUrl.replace(/"/g, '\\"') + '")');
Nicolas Garnier

$('#elem').css('background-image', 'url(' + encodeURIComponent(thumbData.url) + ')');background-image: url("%2Ffiles%2Fusers%2Fthumbs%2F36206608-hd-pics-3.jpg");
顺便

47

除了其他人的正确建议,我发现通常更容易切换CSS类,而不是单独的CSS设置(尤其是背景图片URL)。例如:

// in CSS 
.bg1 
{
  background-image: url(/some/image/url/here.jpg);
}

.bg2 
{
  background-image: url(/another/image/url/there.jpg);
}

// in JS
// based on value of imageUrl, determine what class to remove and what class to add.
$('myOjbect').removeClass('bg1').addClass('bg2');

2
这是一种更好的处理方式,因为它使您可以使用CSS预处理器。
calumbrodie

这很棒,比更直接的解决方案要好得多。
Magicode 2013年

这将同时加载两个图像。
sheriffderek 2014年

这实际上是推荐的解决方案吗?似乎这不必要地需要更多信息,例如,在存在第三张可能的背景图像的情况下,您将需要删除所有其他背景图像,或者跟踪“当前”图像。还要有配置详细信息,例如.css文件中的这些URI,会让我发疯。:smiley:我必须搜索所有代码!
Anne van Rossum 2014年

使用这样的类也是我的偏爱,因为它使您可以在代码和样式之间保持清晰的分隔。然后,我可以更改CSS中的所有图像和动画(通过媒体选择器等),而无需弄乱代码。如果您将图像保留在代码范围之外,则不必搜索整个代码!
埃文·朗卢瓦

14

这是我的代码:

$('body')。css('background-image','url(“ / apo / 1.jpg”)');

享受,朋友


13

除了其他答案,您还可以使用“背景”。当您要设置与背景使用图像方式有关的其他属性时,这特别有用,例如:

$("myObject").css("background", "transparent url('"+imageURL+"') no-repeat right top");

当我认为原始操作使用背景而不是背景图像时,此答案更有意义。我已经修改了答案,使之更有意义,无论如何,我都将其留在此处供后代参考。
马特·帕金斯

6

对于使用实际URL而不是变量的用户:

$('myObject').css('background-image', 'url(../../example/url.html)');

3

尝试修改“样式”属性:

$('myObject').attr('style', 'background-image: url("' + imageUrl +'")');

1
将替换所有其他样式。不推荐
梅尔文

2

字符串插值可用于救援。

let imageUrl = 'imageurl.png';
$('myOjbect').css('background-image', `url(${imageUrl})`);

1

我遇到的问题是,我一直;url()值的末尾添加分号,这使代码无法正常工作。

不适用的代码:

$('#image_element').css('background-image', 'url(http://example.com/img.jpg);');

工作代码:

$('#image_element').css('background-image', 'url(http://example.com/img.jpg)');

请注意;工作代码末尾省略的分号。我只是不知道正确的语法,因此很难注意到它。希望这可以帮助同一条船上的其他人。


0

别忘了jQuery css函数允许传递对象,这允许您同时设置多个项目。回答的代码将如下所示:

$(this).css({'background-image':'url(' + imageUrl + ')'})


-3
$('myObject')。css({'background-image':'url(imgUrl)',});

这是行不通的,因为该网址用单引号引起来。
萨尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.