Установка фонового изображения с помощью свойства 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.