jQuery CSSプロパティを使用して背景画像を設定する


379

imageUrl変数に画像のURLがあり、jQueryを使用してそれをCSSスタイルとして設定しようとしています:

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

これは機能していないようです:

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

を返しますnone

何か考え、私は間違っているのですか?


1
問題は正確には何ですか?Jqueryはエラーをスローしていますか?
Mike_G

いいえ、正しく設定されていません。私はそれをログに記録していますが、変化していません。
ブランクマン、

2
初めてjQueryはユーザーの意図を推測しようとしません。
gblazex 2011年

回答:


926

おそらくこれが必要です(通常のCSS背景画像宣言のようにするため)。

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

私はこのようにしていたのですが、 'url'と左括弧の間にスペースがあると、コードが失敗しました。あなたのものをコピー/貼り付けて、問題を実現しました。ありがとう!
pmartin 2015

このスクリプトでコードを使用していますが、background-imageを取得しています。url((unknown)); これは私のスクリプトです: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 + ')');}); なぜか?
Gaston Coroleu

71

次のように、imageUrlの前後に二重引用符( ")を含めます。

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

この方法では、画像にスペースがある場合でも、プロパティとして設定されます。


6
その場合、それは$('myObject').css('background-image', 'url(' + encodeURIComponent(imageUrl) + ')');
Arosboro


これで解決しました。二重引用符が必要でした。画像名にスペースが含まれています。そうでなければ、何も起こりません。私は$('.myObject').css('background-color', 'green'); 仕事のようなものを得ることができましたが、二重引用符なしで画像を変更しませんでした。ありがとう!
ゴーストエコー

1
encodeURIComponentURLの一部にすでにURLエスケープ文字が含まれている場合は機能しません。あなたはかかわらIMAGEURLの潜在的な二重引用符をエスケープする必要があります$('myObject').css('background-image', 'url("' + imageUrl.replace(/"/g, '\\"') + '")');
ニコラス・ガルニエ

by byによって、やって$('#elem').css('background-image', 'url(' + encodeURIComponent(thumbData.url) + ')');くれてくれたbackground-image: url("%2Ffiles%2Fusers%2Fthumbs%2F36206608-hd-pics-3.jpg");
Daerik

47

他の人が正しく示唆しているものの代わりに、個別のCSS設定(特に背景画像のURL)ではなく、通常はCSSクラスを切り替える方が簡単だと思います。例えば:

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

これは素晴らしく、より直接的なソリューションよりもはるかに優れています。
Magicode 2013年

ただし、これは両方のイメージをロードします。
sheriffderek 14

これは実際に推奨されるソリューションですか?これは不必要に多くの情報を必要とするようです。たとえば、3つ目の背景画像がある場合、他のすべての背景画像を削除するか、「現在の」画像を追跡する必要があります。また、.cssファイルにこれらのURIなどの構成の詳細を含めると、私は夢中になります。:smiley:コード全体を検索する必要があります!
アンヴァンロッサム2014年

このようなクラスを使用すると、コードとスタイルを明確に分離できるため、私の好みでもあります。次に、コードをいじることなく、CSS内のすべての画像とアニメーションを(メディアセレクターなどを介して)変更できます。画像をコードから除外する場合は、コード全体を検索する必要はありません。
Evan Langlois

14

これが私のコードです:

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

楽しんで、友達


13

他の回答に加えて、「背景」を使用することもできます。これは、画像が背景で使用される方法に関連する次のような他のプロパティを設定する場合に特に便利です。

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

この答えは、元の操作でbackground-imageではなくbackgroundを使用していると思ったときに、より理にかなっています。私は自分の答えをより意味のあるものに変更しましたが、とにかくここに残しておきます。
Matt Parkins

6

変数ではなく実際のURLを使用する場合:

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

3

"style"属性を変更してみてください:

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

1
他のすべてのスタイルを置き換えます。非推奨
メルビン2018年

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が単一引用符で囲まれているため、これは機能しません。
2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.