2012-05-27 18 views
9

He intentado todo tipo de cosas, pero creo que me estoy volviendo demasiado complicado e incluso he logrado que Chrome se cuelgue con mi selector. Estoy seguro de que los theres una manera simple de hacer estoselector CSS con clase a, pero no clase b

Seleccionar classa pero sólo cuando los theres ninguna classb e ignorar la última instancia de la misma

<div class="container"> 
    <div class="classa classb"></div> <!-- Dont Select --> 
    <div class="classa"></div> <!-- Select --> 
    <div class="classa"></div> <!-- Dont select last instance --> 
</div> 

Respuesta

12

Creo que se puede hacer esto con CSS 3 utilizando el :not() seleccionado (ejemplo here)

div.classa:not(.classb):not(:last-child) {}

Sin embargo, como es sabido, no muchos navegador es compatible con esto, así Javascript podría ser una manera más fácil ..

+0

Además, no podrá excluir el último '.classa' si no es el último hijo. Consulte http://stackoverflow.com/questions/10230416/is-it-possible-using-current-browsers-to-use-pseudo-classes-to-detect-first-and/10230466#10230466 – BoltClock

+0

Sí, esto es un problema He estado haciendo pruebas – Akshat

2
.classa:not(.classb):not(:last-child) { 
    /* rules */ 
} 

Probado en Firefox 12, Chrome 19, Safari 5 y Opera 10. Desafortunadamente no funciona (... ¿adivina quién?) IE.

+0

Porque no ha actualizado su IE. – BoltClock

+0

Probé en IE 9 - no funciona. Incluso si funcionó, la mayoría de las personas todavía usa versiones anteriores ... – Simone

+0

Asegúrese de estar realizando pruebas en el modo estándar. IE9 admite estos selectores por completo, pero solo en modo estándar. – BoltClock

1

Probar:

.classa:not(.classb):first-child { 
    background: red; 
} 

esto no funcionará en IE 7 u 8 sin embargo.

+0

Esto está mal, porque el primer hijo es '.classa.classb'. – BoltClock

Cuestiones relacionadas