2009-02-04 21 views
321

Mam URL obrazu w imageUrl zmienna i próbuję ustawić go jako stylu CSS, przy użyciu jQuery:Ustawienie tła obrazu za pomocą właściwości jQuery CSS

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

To wydaje się być nie działa, jak:

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

zwraca none.

Każdy pomysł, co robię źle?

+1

Czym dokładnie jest problem? Czy Jquery rzuca błąd? –

+0

Nie, nie jest ustawiony prawidłowo. Loguję się i to się nie zmienia. – Blankman

+2

Po raz pierwszy jQuery nie próbuje odgadnąć, co użytkownik ma na myśli. – galambalazs

Odpowiedz

803

Prawdopodobnie chcesz to (aby uczynić go jak normalny deklaracji CSS background-image):

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

Robiłem to w ten sposób - ale spacja między "url" a lewymi nawiasami powodowała błąd mojego kodu. Skopiuj/wklej swoje i zrealizuj problem. Dzięki! – pmartin

60

Będziesz chcesz dołączyć cudzysłów (") przed i po tym imageURL tak:

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

w ten sposób, jeśli obraz zawiera spacje to nadal będzie ustawiony jako właściwość

+2

Adresy URL nie mogą zawierać spacji. Spacje muszą być zakodowane. –

+6

w takim przypadku powinien to być '$ (" myObject "). Css (" obraz w tle "," adres url ("+ encodeURIComponent (imageUrl) +") ");' – Arosboro

+4

Cytaty nie są konieczne: http: // stackoverflow.com/questions/2168855/css-url-are-quotes-eded – nullability

15

Oto mój kod.

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

Enjoy, przyjaciel

41

Alternatywnie do tego, co inni są prawidłowo sugerując, że łatwiej zwykle do przełączania klas CSS, zamiast indywidualnych ustawień CSS (zwłaszcza adresów URL tło obrazu). Na przykład:

// 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

To jest o wiele lepszy sposób robienia rzeczy, ponieważ pozwala ci użyć procesora css. – calumbrodie

+0

To jest świetne, znacznie lepsze niż bardziej bezpośrednie rozwiązanie. – Magicode

+0

To jednak spowoduje załadowanie obu obrazów. – sheriffderek

11

Oprócz innych odpowiedzi, możesz również użyć "tła". Jest to szczególnie przydatne, gdy chcesz ustawić inne właściwości odnoszące się do sposobu, w jaki obraz jest używany przez tle, takie jak:

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

Ta odpowiedź nabrała większego sensu, gdy pomyślałem, że oryginalny op użył tła, a nie tła. Zmieniłem moją odpowiedź, aby nadać więcej sensu, a ja zostawię to tutaj dla potomności. –

+0

To nie działa teraz. – Ionut

5

dla osób korzystających rzeczywisty adres URL, a nie zmiennej:

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

Interpolacja z ciągami na ratunek.

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

Spróbuj modyfikację atrybutu "style":

$('myObject').attr('style', 'background-image: url("' + imageUrl +'")'); 
-2
$('myObject').css({'background-image': 'url(imgUrl)',});
+0

To nie zadziała, ponieważ adres URL jest zawarty w pojedynczych cudzysłowach. – Sal

Powiązane problemy