Налаштування фонового зображення за допомогою властивості jQuery CSS


377

У мене є URL-адреса зображення в imageUrlзмінній, і я намагаюся встановити її як стиль CSS, використовуючи jQuery:

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

Здається, це не працює, оскільки:

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

повертає none.

Будь-яка ідея, що я роблю неправильно?


1
Яке саме питання? Jquery кидає помилку?
Mike_G

Ні, це неправильно налаштовано. Я реєструю це, і він просто не змінюється.
Бланкмен

2
Уперше jQuery не намагається вгадати, що мав на увазі користувач.
gblazex

Відповіді:


924

Ви, мабуть, цього хочете (щоб це було як звичайне оголошення CSS-фонового зображення):

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

Я робив це так - але проміжок між 'URL-адресою' та лівими дужками спричинив збій мого коду. Скопіюйте / вставив своє та зрозумів проблему. Дякую!
pmartin

Я використовую ваш код у цьому сценарії, але отримую фонове зображення: url ((невідомо)); Це мій сценарій: var bg_img = jQuery ('. Wp-show-posts-inner'). Attr ('data-src'); jQuery ('. wp-show-posts-inner'). on ('перехід миші', функція () {jQuery ('. home-banner .bg'). css ('background-image', 'url (' + bg_img + ')');}); Будь-яка ідея чому?
Гастон Королеу

71

Ви хочете включити подвійні лапки (") до та після зображенняUrl таким чином:

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

Таким чином, якщо на зображенні є пробіли, воно все одно буде встановлено як властивість.


6
у такому випадку це повинно бути$('myObject').css('background-image', 'url(' + encodeURIComponent(imageUrl) + ')');
Аросборо


Це вирішило це для мене. Мені потрібно було мати подвійні цитати. Імена моїх зображень містять пробіли. Інакше нічого б не сталося. Я міг би отримати щось на кшталт $('.myObject').css('background-color', 'green'); роботи, але не міняти образ без подвійних лапок. Дякую!
Ghost Echo

1
encodeURIComponentне працюватиме, якщо частина вашої URL-адреси вже містила символи, що уникнули URL-адреси. Вам слід уникнути потенційного символу подвійної цитати в 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");
Мимохіть

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

Це збирається завантажувати обидва зображення.
шерифдерек

Це насправді рекомендоване рішення? Схоже, що це зайве потребує додаткової інформації, наприклад, якщо є третій можливий фоновий образ, вам потрібно буде видалити всі інші фонові зображення або альтернативно відстежувати "поточне" зображення. А також мати деталі конфігурації, такі як URI-файли у файлах .css, зводить мене з розуму. : smiley: Мені потрібно шукати весь код!
Енн ван Россум

Використання таких класів також є моїм уподобанням, оскільки це дозволяє вам зберігати чіткий поділ між кодом та стилем. Тоді я можу змінити всі свої зображення та анімації в 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

Спробуйте змінити атрибут "style":

$('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)',});

Це не спрацює, оскільки URL-адреса міститься в одних цитатах.
Сал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.