Đặt ảnh nền bằng thuộc tính CSS jQuery


378

Tôi có một URL hình ảnh trong một imageUrlbiến và tôi đang cố gắng đặt nó theo kiểu CSS, sử dụng jQuery:

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

Điều này dường như không hoạt động, như:

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

trả lại none.

Bất cứ ý tưởng, những gì tôi đang làm sai?


1
Chính xác thì vấn đề là gì? Là Jquery ném một lỗi?
Mike_G

Không, nó không thiết lập đúng. Tôi đang đăng nhập nó và nó chỉ không thay đổi.
Trống

2
Lần đầu tiên jQuery không thử đoán ý nghĩa của người dùng.
gblazex

Câu trả lời:


925

Bạn có thể muốn điều này (để làm cho nó giống như một khai báo hình nền CSS bình thường):

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

Tôi đã làm theo cách này - nhưng khoảng trắng giữa 'url' và dấu ngoặc đơn bên trái đã khiến mã của tôi bị lỗi. Sao chép / dán của bạn và nhận ra vấn đề. Cảm ơn!
pmartin

Tôi sử dụng mã của bạn trong tập lệnh này nhưng lấy cho tôi hình nền: url ((không xác định)); Đây là tập lệnh của tôi: var bg_img = jQuery ('. Wp-show-post-Inside'). Attr ('data-src'); jQuery ('. Wp-show-post-Internal'). on ('mouseover', function () {jQuery ('. home-banner .bg'). css ('hình nền + ')');}); Bất cứ ý tưởng tại sao?
Gaston Coroleu

71

Bạn sẽ muốn bao gồm dấu ngoặc kép (") trước và sau imageUrl như thế này:

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

Bằng cách này, nếu hình ảnh có khoảng trắng, nó vẫn sẽ được đặt làm thuộc tính.


6
trong trường hợp đó, nó phải là$('myObject').css('background-image', 'url(' + encodeURIComponent(imageUrl) + ')');
Arosboro


Điều này đã giải quyết nó cho tôi. Tôi cần phải có dấu ngoặc kép. Tên hình ảnh của tôi có chứa không gian. Nếu không, sẽ không có gì xảy ra. Tôi có thể nhận được một cái gì đó như $('.myObject').css('background-color', 'green'); để làm việc, nhưng không thay đổi hình ảnh mà không có dấu ngoặc kép. Cảm ơn!
Ghost Echo

1
encodeURIComponentsẽ không hoạt động nếu một phần URL của bạn đã chứa các ký tự thoát URL. Bạn nên thoát khỏi ký tự trích dẫn tiềm năng trong imageUrl:$('myObject').css('background-image', 'url("' + imageUrl.replace(/"/g, '\\"') + '")');
Nicolas Garnier

Nhân tiện, việc này $('#elem').css('background-image', 'url(' + encodeURIComponent(thumbData.url) + ')');đã cho tôibackground-image: url("%2Ffiles%2Fusers%2Fthumbs%2F36206608-hd-pics-3.jpg");
Daerik

47

Ngoài ra, với những gì người khác đang đề xuất chính xác, tôi thấy việc chuyển đổi các lớp CSS dễ dàng hơn, thay vì các cài đặt CSS riêng lẻ (đặc biệt là các URL hình ảnh nền). Ví dụ:

// 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
Đây là một cách tốt hơn để làm mọi thứ vì nó cho phép bạn sử dụng bộ xử lý trước css.
calumbrodie

Điều này là tuyệt vời, tốt hơn nhiều so với giải pháp trực tiếp hơn.
Magicode

Điều này sẽ tải cả hai hình ảnh mặc dù.
sheriffderek

Đây thực sự là một giải pháp được đề nghị? Có vẻ như điều này không cần thiết phải có thêm thông tin, ví dụ trong trường hợp có hình nền thứ ba có thể, bạn sẽ cần phải xóa tất cả các hình nền khác hoặc theo dõi thay thế hình ảnh "hiện tại". Và cũng để có chi tiết cấu hình, chẳng hạn như các URI này trong các tệp .css làm tôi phát điên. : smiley: Tôi phải tìm kiếm tất cả các mã!
Anne van Rossum

Sử dụng các lớp như thế này cũng là sở thích của tôi vì nó cho phép bạn giữ một sự tách biệt rõ ràng giữa mã và kiểu. Sau đó tôi có thể thay đổi tất cả hình ảnh và hình ảnh động của mình trong css (thông qua các bộ chọn phương tiện và như vậy) mà không bị rối với mã. Bạn không phải tìm kiếm trên tất cả các mã nếu bạn giữ hình ảnh của mình NGOÀI mã!
Evan Langlois

14

Đây là mã của tôi:

$ ('body'). css ('hình nền', 'url ("/ apo / 1.jpg")');

Thưởng thức, bạn


13

Ngoài ra với các câu trả lời khác, bạn cũng có thể sử dụng "nền". Điều này đặc biệt hữu ích khi bạn muốn đặt các thuộc tính khác liên quan đến cách hình ảnh được sử dụng bởi nền, chẳng hạn như:

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

Câu trả lời này có ý nghĩa hơn khi tôi nghĩ rằng op ban đầu đã sử dụng nền không phải hình nền. Tôi đã sửa đổi câu trả lời của mình để có ý nghĩa hơn và dù sao tôi cũng sẽ để nó ở đây cho hậu thế.
Matt Parkins

6

Đối với những người sử dụng URL thực tế và không phải là một biến:

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

3

Hãy thử sửa đổi thuộc tính "style":

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

1
sẽ thay thế tất cả các phong cách khác. Không được đề xuất
melvin

2

Nội suy chuỗi để giải cứu.

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

1

Vấn đề tôi gặp phải là tôi tiếp tục thêm dấu chấm phẩy ;ở cuối url()giá trị, điều này ngăn mã hoạt động.

MÃ KHÔNG LÀM VIỆC:

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

MÃ LÀM VIỆC:

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

Lưu ý dấu chấm phẩy bị bỏ qua ;ở cuối mã làm việc. Tôi chỉ đơn giản là không biết cú pháp chính xác, và thật khó để nhận ra nó. Hy vọng điều này sẽ giúp người khác trong cùng một chiếc thuyền.


0

Đừng quên rằng hàm css jQuery cho phép các đối tượng được thông qua cho phép bạn đặt nhiều mục cùng một lúc. Mã được trả lời sẽ trông như thế này:

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


-3
$ ('myObject'). css ({'hình nền': 'url (imgUrl)',});

Điều này sẽ không hoạt động vì url được đặt trong các dấu ngoặc đơn.
Sal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.