Установка фонового изображения с помощью свойства jQuery CSS


380

У меня есть URL изображения в imageUrlпеременной, и я пытаюсь установить его как стиль CSS, используя jQuery:

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

Это, кажется, не работает, так как:

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

возвращается none.

Есть идеи, что я делаю не так?


1
В чем именно проблема? Jquery выдает ошибку?
Mike_G

Нет, это неправильно. Я регистрирую это, и это просто не изменяется.
Blankman

2
В первый раз jQuery не пытается угадать, что имел в виду пользователь.
gblazex

Ответы:


926

Вы, вероятно, хотите это (чтобы сделать это как обычное объявление CSS background-image):

$('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 ('mouseover', function () {jQuery ('. home-banner .bg'). css ('background-image', 'url (' + bg_img) + ')');}); Есть идеи почему?
Гастон Королеу

URL (<ваш URL>) не работает для меня. Значение должно быть внутри кавычек, т.е. url ("<ваш URL>") или URL ("<ваш URL>").
ankur_rajput

71

Вы хотите включить двойные кавычки (") до и после imageUrl следующим образом:

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

Таким образом, если изображение имеет пробелы, оно все равно будет установлено как свойство.


6
в таком случае это должно быть$('myObject').css('background-image', 'url(' + encodeURIComponent(imageUrl) + ')');
Arosboro


Это решило это для меня. Мне нужно было двойные кавычки. Мои имена изображений содержат пробелы. Иначе ничего бы не произошло. Я мог бы заставить что-то вроде $('.myObject').css('background-color', 'green'); работать, но не менять изображение без двойных кавычек. Спасибо!
Призрачное эхо

1
encodeURIComponentне будет работать, если часть вашего URL уже содержит экранированные символы URL. Вы должны избежать потенциальной двойной кавычки в 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");
Daerik

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");

Этот ответ имел больше смысла, когда я подумал, что в оригинальной работе использовался фон, а не background-image. Я изменил свой ответ, чтобы придать ему больше смысла, и все равно оставлю его здесь для потомков.
Мэтт Паркинс

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.