2011-10-24 47 views
3

我正在尋找一種方法來選擇所有具有指定backgroundImage的對象。 我已經嘗試過的東西,如:如何查找具有指定backgroundImage的所有元素

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

一些更好的想法?

+1

這是非常廣泛的,你可以只選擇對象改進/元素都不可能有像'的BG $ .each($('div'),function(){'也''(this).css('backgroundImage')'將返回當前元素的bg以comapare它你可以嘗試'if($(this) 。'''=='someBGimage')' – Rafay

+0

測試'無'將是一個解決方案: $ .each($('*'),function(){ if($(this)。 css('backgroundImage')!='none'){ console.info($(this).css('backgroundImage')); } }); –

+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規則繼承後臺圖像的任何元素。 @ BobTodd的答案將得到兩者,因爲jQuery的.css()getter實現使用currentStyle/getComputedStyle。 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') 
相關問題