2010-04-19 10 views
8

Estoy tratando de usar jQuery para encontrar el número de divs que son visibles y tienen un color de fondo de verde.Usa jQuery para encontrar div por color de fondo

(Normalmente solo agregaría una clase a la div, la pondré verde y verificaría esa clase en jQuery, pero en este caso, no puedo cambiar el marcado de la página de ninguna manera)

Actualmente tengo la parte visible div trabajando como:

if( // if there are more than one visible div 
    $('div.progressContainer:visible').length > 0 
){ 

me gustaría lanzar una especie de "y color de fondo es verde" selector de allí.

// not legit javascript 
if( // if there are more than one visible div, and its color is green 
    $('div.progressContainer:visible[background-color:green]').length > 0 
){ 

¿Es posible hacer esto?

Respuesta

6

Si utiliza esto en más de un lugar con frecuencia se podía también considere escribir su propio selector personalizado (http://answers.oreilly.com/topic/1055-creating-a-custom-filter-selector-with-jquery/)

jQuery.expr[':'].greenbg = function(elem) { 
     return jQuery(elem).css('background-color') === 'green'; 
}; 

Entonces simplemente lo haría $('div:visible:greenbg').stuffs()

+0

Como @SLaks señaló que esto no coincidirá con '# 0f0' pero proporciona un lugar único para que usted incluya todos esos controles. –

11

jQuery no tiene selectores basados ​​en estilo (que no sean :visible), por lo que no puede hacer eso.

Se puede utilizar en lugar filter:

$('div.progressContainer:visible').filter(function() { 
    return $(this).css('background-color') === 'green'; 
}) 

en cuenta que no coincidirá con background-color:#0F0.

0

usted puede hacer esto:

if($('div.progressContainer:visible').css('background-color') == 'green'){ 
    //should equal true, if it's green 
} 
3

Usted puede utilizar filter para afinar lo que estás seleccionando de esta manera:

$('div.progressContainer:visible').filter(function(){ 
    return $(this).css('background-color') == 'green'; 
}); 
Cuestiones relacionadas