2009-02-04 31 views
321

tengo una URL de la imagen en un imageUrl variable y estoy tratando de establecerlo como el estilo CSS, usando jQuery:configurar el fondo de imagen usando jQuery CSS propiedad

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

Ésta parece ser que no trabaja, como:

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

devuelve none.

¿Alguna idea, qué estoy haciendo mal?

+1

¿Cuál es exactamente el problema? ¿Jquery está arrojando un error? –

+0

No, no lo está configurando correctamente. Lo estoy registrando y simplemente no está cambiando. – Blankman

+2

La primera vez que jQuery no intenta adivinar a qué se refería el usuario. – galambalazs

Respuesta

803

es probable que desee esto (para que sea como una declaración CSS-imagen de fondo normal):

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

Lo estaba haciendo de esta manera, pero un espacio entre 'url' y el paréntesis izquierdo estaba causando que mi código fallara. Copió/pegó el suyo y se dio cuenta del problema. ¡Gracias! – pmartin

60

usted querrá incluir comillas (") antes y después de la imageUrl como esto:

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

De esta manera, si la imagen tiene espacios todavía será establecido como una propiedad

+2

Las URL no pueden tener espacios en ellas. Los espacios necesitan ser codificados. –

+6

en ese caso, debe ser '$ ('myObject'). Css ('background-image', 'url (' + encodeURIComponent (imageUrl) + ')');' – Arosboro

+4

Las cotizaciones no son necesarias: http: // stackoverflow.com/questions/2168855/css-url-are-quotes-needed – nullability

15

Aquí está mi código:.

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

Enjoy, amigo

41

Como alternativa a lo que los otros están sugiriendo correctamente, me resulta más fácil por lo general para alternar clases CSS, en lugar de los ajustes individuales (especialmente CSS URL de imágenes de fondo). Por ejemplo:

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

Esta es una forma mucho mejor de hacer las cosas porque le permite usar un preprocesador css. – calumbrodie

+0

Esto es genial, mucho mejor que la solución más directa. – Magicode

+0

Sin embargo, va a cargar ambas imágenes. – sheriffderek

11

Además de las otras respuestas, también puede usar "fondo". Esto es particularmente útil cuando se desea establecer otras propiedades relacionadas con la forma en que la imagen es utilizada por el fondo, tales como:

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

Esta respuesta tiene más sentido cuando pensé que la operación original había utilizado el fondo, no la imagen de fondo. He modificado mi respuesta para que tenga más sentido, y lo dejaré aquí para la posteridad de todos modos. –

+0

Esto no funciona ahora. – Ionut

5

Para aquellos que utilizan una URL real y no una variable:

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

Interpolación de cadenas al rescate.

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

intente modificar el atributo "estilo":

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

Esto no funcionará porque la url está encerrada en comillas simples. – Sal

Cuestiones relacionadas