2011-10-24 46 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') 
相关问题