Festlegen des Hintergrundbilds mithilfe der jQuery CSS-Eigenschaft


378

Ich habe eine Bild-URL in einer imageUrlVariablen und versuche, sie mit jQuery als CSS-Stil festzulegen:

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

Dies scheint nicht zu funktionieren, da:

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

kehrt zurück none.

Irgendeine Idee, was ich falsch mache?


1
Was genau ist das Problem? Wirft Jquery einen Fehler?
Mike_G

Nein, es ist nicht richtig eingestellt. Ich protokolliere es und es ändert sich einfach nicht.
Blankman

2
Beim ersten Mal versucht jQuery nicht zu erraten, was der Benutzer gemeint hat.
Gblazex

Antworten:


925

Sie möchten dies wahrscheinlich (um es wie eine normale CSS-Hintergrundbilddeklaration zu machen):

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

Ich habe es so gemacht - aber ein Leerzeichen zwischen 'url' und den linken Klammern führte dazu, dass mein Code fehlschlug. Kopieren Sie Ihre / fügen Sie sie ein und erkennen Sie das Problem. Vielen Dank!
pmartin

Ich verwende Ihren Code in diesem Skript, erhalte aber ein Hintergrundbild: url ((unbekannt)); Dies ist mein Skript: var bg_img = jQuery ('. Wp-show-posts-inner'). Attr ('data-src'); jQuery ('. wp-show-posts-inner'). on ('mouseover', function () {jQuery ('. home-banner .bg'). css ('hintergrundbild', 'url (' + bg_img + ')');}); Irgendeine Idee warum?
Gaston Coroleu

71

Sie möchten doppelte Anführungszeichen (") vor und nach der imageUrl wie folgt einfügen:

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

Auf diese Weise wird das Bild, wenn es Leerzeichen enthält, weiterhin als Eigenschaft festgelegt.


6
in diesem Fall sollte es sein$('myObject').css('background-image', 'url(' + encodeURIComponent(imageUrl) + ')');
Arosboro


Das hat es für mich gelöst. Ich musste doppelte Anführungszeichen haben. Meine Bildnamen enthalten Leerzeichen. Sonst würde nichts passieren. Ich könnte so etwas wie $('.myObject').css('background-color', 'green'); arbeiten lassen, aber das Bild nicht ohne doppelte Anführungszeichen ändern. Vielen Dank!
Ghost Echo

1
encodeURIComponentfunktioniert nicht, wenn ein Teil Ihrer URL bereits URL-Escapezeichen enthält. Sie sollten jedoch potenziellen doppelten Anführungszeichen in imageUrl entkommen:$('myObject').css('background-image', 'url("' + imageUrl.replace(/"/g, '\\"') + '")');
Nicolas Garnier

Übrigens $('#elem').css('background-image', 'url(' + encodeURIComponent(thumbData.url) + ')');gab mir das Tunbackground-image: url("%2Ffiles%2Fusers%2Fthumbs%2F36206608-hd-pics-3.jpg");
Daerik

47

Alternativ zu dem, was die anderen richtig vorschlagen, fällt es mir normalerweise leichter, CSS-Klassen umzuschalten, anstatt einzelne CSS-Einstellungen (insbesondere Hintergrundbild-URLs). Zum Beispiel:

// 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
Dies ist eine viel bessere Möglichkeit, Dinge zu tun, da Sie damit einen CSS-Pre-Prozessor verwenden können.
Calumbrodie

Das ist großartig, viel besser als die direktere Lösung.
Magicode

Dadurch werden jedoch beide Bilder geladen.
Sheriffderek

Ist das eigentlich eine empfohlene Lösung? Es scheint, dass dies unnötig mehr Informationen erfordert, z. B. falls es ein drittes mögliches Hintergrundbild gibt, müssen Sie alle anderen Hintergrundbilder entfernen oder alternativ das "aktuelle" Bild verfolgen. Und auch Konfigurationsdetails wie diese URIs in den CSS-Dateien zu haben, macht mich verrückt. : smiley: Ich muss den ganzen Code durchsuchen!
Anne van Rossum

Die Verwendung solcher Klassen ist auch meine Präferenz, da Sie so eine saubere Trennung zwischen Code und Stil beibehalten können. Ich kann dann alle meine Bilder und Animationen in der CSS ändern (über Medienselektoren und dergleichen), ohne mit dem Code herumzuspielen. Sie müssen nicht den gesamten Code durchsuchen, wenn Sie Ihre Bilder außerhalb des Codes halten!
Evan Langlois

14

Hier ist mein Code:

$ ('body'). css ('Hintergrundbild', 'url ("/ apo / 1.jpg")');

Viel Spaß, Freund


13

Neben den anderen Antworten können Sie auch "Hintergrund" verwenden. Dies ist besonders nützlich, wenn Sie andere Eigenschaften festlegen möchten, die sich auf die Art und Weise beziehen, wie das Bild vom Hintergrund verwendet wird, z.

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

Diese Antwort machte mehr Sinn, als ich dachte, die ursprüngliche Operation hätte Hintergrund und nicht Hintergrundbild verwendet. Ich habe meine Antwort geändert, um mehr Sinn zu machen, und ich werde dies trotzdem der Nachwelt überlassen.
Matt Parkins

6

Für diejenigen, die eine tatsächliche URL und keine Variable verwenden:

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

3

Versuchen Sie, das Attribut "style" zu ändern:

$('myObject').attr('style', 'background-image: url("' + imageUrl +'")');

1
ersetzt alle anderen Stile. Nicht empfohlen
Melvin

2

String-Interpolation zur Rettung.

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

1

Das Problem, das ich hatte, war, dass ich ;am Ende des url()Werts immer wieder ein Semikolon hinzufügte , wodurch der Code nicht mehr funktionierte.

NICHT ARBEITSCODE:

$('#image_element').css('background-image', 'url(http://example.com/img.jpg);');

ARBEITSCODE:

$('#image_element').css('background-image', 'url(http://example.com/img.jpg)');

Beachten Sie das ausgelassene Semikolon ;am Ende des Arbeitscodes. Ich kannte einfach nicht die richtige Syntax und es ist wirklich schwer, sie zu bemerken. Hoffentlich hilft das jemand anderem im selben Boot.


0

Vergessen Sie nicht, dass mit der CSS-Funktion jQuery Objekte übergeben werden können, mit denen Sie mehrere Elemente gleichzeitig festlegen können. Der beantwortete Code würde dann folgendermaßen aussehen:

$(this).css({'background-image':'url(' + imageUrl + ')'})


-3
$ ('myObject'). css ({'Hintergrundbild': 'url (imgUrl)',});

Dies funktioniert nicht, da die URL in einfache Anführungszeichen gesetzt ist.
Sal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.