2011-10-24 13 views
3

私は指定されたbackgroundImageを持つすべてのオブジェクトを選択する方法を探しています。指定されたbackgroundimageを持つすべての要素を見つける方法

$.each($('*'), function(){ 
    if ($(this).css('backgroundImage')){ 
    console.info("backroundimage"); 
    }else { 
    console.info("no backgroundimage"); 
    } 
}); 

いくつかのより良いアイデア: 私はすでにのようなものを試してみましたか?

+1

これは非常に広範囲ですが、bgを持つ可能性のあるオブジェクト/あなたが試してみることができるように、現在の要素のbgを返します。if($(this)).css( 'backgroundImage' .css( 'backgroundImage')== 'someBGimage') ' – Rafay

+0

'なし'のテストは解決策になります: $ .each($( '*')、function(){ if($(this) css( 'backgroundImage')!= 'none'){ console.info($(this).css( 'backgroundImage')); } }); –

+1

非常に正しいですが、私はその1つを逃しました... – Rafay

答えて

4

Filters?

$('*').filter(function() { 
    return $(this).css('background-image') == 'image.png'; 
}); 
+0

大きなページで使用される場合、 '*'は高価なセレクタ(遅い)を選択するものを言及する価値があります。また、以下の@ Steveの答えは、このプロパティが単純にここに暗示されている画像ファイル名の代わりに "url( '....')を返すという事実を説明しています。 –

3

一つの方法:もちろん

var elementsWithBG = $('.YourSelector').filter(function(){ 
    return this.style.backgroundImage != '' 
}); 

ないすべての要素が*を使用すると、高価であるなどスパン、リンク、などの背景を持って、あなたがして必要な要素を分離することができます'.YourSelector'の代わりにコンマを使用します。例:

$('div, p, etc') 
+0

警告:これは、tag.style.backgroundImage ...のように明示的に設定したすべての要素を取得しますが、CSSルールから背景画像を継承した要素は取得されません。 jQueryの.css()ゲッターの実装はcurrentStyle/getComputedStyleを使用するため、@ BobToddの答えは両方とも取得されます。 http://api.jquery.com/css/ –

0

あなたは正しい軌道に乗って、ソートのだ:

var url = $(this).css("background-image"); 
if (url == theExpectedImageUrl) { 
    //found image 
}); 

しかし、コメントで述べたように、おそらくのすべての要素をこれを行うことは行く方法ではありません!

1

あなたはそれの要点をかなり達成しました。あなたが既に持っているものに拡張すること

:(存在する場合)

$('*').each(function(){ 

    var bgImgStr = $(this).css('backgroundImage'), 
     regEx = /\"|\'|\)/g, 
     bgImgName = bgImgStr.split('/').pop().replace(regEx,''); 

    if(bgImgName === 'whatever.jpg'){ 

     // do something 

    } 

}); 

Incedentally、正規表現の部分は、ファイル名以外のすべてをsrtips。この追加の理由は、ブラウザによっては、次のようなものがあるからです:

url('../images/myImg.jpg') 
関連する問題