ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

这似乎不起作用,因为:

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

返回 none

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

究竟是什么问题? Jquery 是否抛出错误?
不,它没有正确设置它。我正在记录它,它只是没有改变。
jQuery 第一次不尝试猜测用户的意思。

D
Dessa Simpson

你可能想要这个(让它像一个普通的 CSS 背景图像声明):

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

我是这样做的 - 但是“url”和左括号之间的空格导致我的代码失败。复制/粘贴你的并意识到问题。谢谢!
我在这个脚本中使用了你的代码,但得到了我的背景图像:url((未知));这是我的脚本: 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 + ')'); });知道为什么吗?
url() 对我不起作用。该值必须在引号内,即 url("") 或 url('')。
A
Arosboro

您需要在 imageUrl 之前和之后包含双引号 ("),如下所示:

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

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


在这种情况下,它应该是 $('myObject').css('background-image', 'url(' + encodeURIComponent(imageUrl) + ')');
这为我解决了。我需要有双引号。我的图像名称确实包含空格。否则,什么都不会发生。我可以让 $('.myObject').css('background-color', 'green'); 之类的东西工作,但不能在没有双引号的情况下更改图像。谢谢!
如果您的部分 URL 已包含 URL 转义字符,则 encodeURIComponent 将不起作用。不过,您应该在 imageUrl 中转义潜在的双引号字符:$('myObject').css('background-image', 'url("' + imageUrl.replace(/"/g, '\\"') + '")');
顺便说一句,做$('#elem').css('background-image', 'url(' + encodeURIComponent(thumbData.url) + ')');给了我background-image: url("%2Ffiles%2Fusers%2Fthumbs%2F36206608-hd-pics-3.jpg");
K
Kon

除了其他人正确建议的内容之外,我发现切换 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');

这是一种更好的处理方式,因为它允许您使用 css 预处理器。
这很棒,比更直接的解决方案要好得多。
不过,这将加载两个图像。
这实际上是推荐的解决方案吗?这似乎不必要地需要更多信息,例如,如果有第三个可能的背景图像,您将需要删除所有其他背景图像,或者跟踪“当前”图像。还有配置细节,比如 .css 文件中的这些 URI 让我发疯。 :smiley: 我必须搜索所有代码!
使用这样的类也是我的偏好,因为它可以让您在代码和样式之间保持清晰的分离。然后,我可以更改 css 中的所有图像和动画(通过媒体选择器等),而不会弄乱代码。如果您将图像保留在代码之外,则不必搜索所有代码!
A
Apo

这是我的代码:

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

享受吧,朋友


M
Matt Parkins

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

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

当我认为原始操作使用背景而不是背景图像时,这个答案更有意义。我已经修改了我的答案以使其更有意义,无论如何我都会将其留在这里以供后代使用。
P
Prid

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

❌ 不工作代码:

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

✅ 工作代码:

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

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


这非常有效,因为 jQuery 可以将其附加到样式属性。
P
Pang

对于那些使用实际 URL 而不是变量的人:

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

a
appcropolis

尝试修改“样式”属性:

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

将替换所有其他样式。不建议
S
Sushanth --

字符串插值救援。

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

A
Antony

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

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


这应该被赞成。完全习惯了语法 .css( {...} )
w
wahaj
$('myObject').css({'background-image': 'url(imgUrl)',});

这不起作用,因为 url 用单引号括起来。