Tengo un elemento DOM (#installations) con un número de hijos, solo uno de ellos tiene una clase .selected. Necesito seleccionar esta clase y los primeros 3 del resto (: no (.selected)) y mostrarlos - el objetivo es tener solo 4 elementos mostrados, independientemente de qué elemento tenga seleccionada la clase.Seleccionar una clase y los 3 primeros del resto; nth-child y nth-of-type inútil
El problema es, en la expresión:
#installations > *:not(.selected):nth-of-type(-n+3), .selected
: n-ésimo de tipo() no tiene en cuenta la: selector no() y simplemente selecciona las 3 primeras hijos de #installation. Por ejemplo, si tengo este código HTML:
<div id="installations">
<div id="one"/>
<div id="two"/>
<div id="three" class="selected"/>
<div id="four"/>
<div id="five"/>
</div>
Solo tendré seleccionado uno, dos, tres y no los primeros cuatro. La implicación lógica es que: nth-of-type() tendrá solo (uno, dos, cuatro, cinco) para seleccionar, ya que: not() ya excluyó el seleccionado, seleccionando (uno, dos, cuatro), y luego la otra parte del selector , .selected
agregará el elemento seleccionado.
Si .selected no está en los primeros cuatro elementos, digamos que es el sexto, vamos a tener los primeros tres + sextos elementos seleccionados.
Para aclarar: la selección .selected más 3 elementos adyacentes también está bien. Sin embargo, esto también es difícil en caso de que .selected esté en los últimos 3 (si seleccionamos los 3 elementos adyacentes siguientes)
pseudo-clases no son procesado secuencialmente; todos son evaluados juntos en todos y cada uno de sus elementos. Ver [esta respuesta] (http: // stackoverflow.com/a/5217102/106224) para más detalles (también cubre ': not()'). En su caso, ': not (.selected): nth-of-type (-n + 3)' toma los primeros dos elementos (el tercero es '.selected'), y' .selected' toma el tercero. – BoltClock
Ese es el problema. Si solo pudiera excluir .selected en la primera parte del selector (antes de la primera pseudo-clase). Alternativamente, puedo poner una clase ".unselected" en todos los demás elementos, pero esperaba una solución más limpia. – Ivo