2011-10-23 19 views
17

Rozważmy następujący kod HTML:CSS nie selektor rodzeństwa

<div> 
    <div class="iwant" /> 
    <div class="idontwant" /> 
</div> 
<div> 
    <div class="iwant" /> 
</div> 

Jestem zainteresowany selektora (przeszukiwania zawartości, więc nie mogę zmodyfikować html), który wybierze wszystkie iwant że nie mam rodzeństwa z klasą idontwant.

Odpowiedz

34

Nie ma selera rodzeństwa, który dopasowałby elementy (lub nie) według klas.

Najbliżej selektor mogę myśleć jest

.iwant:only-child 

Ale to selektor oznacza, że ​​nie może być żadnych innych elementów poza tym div class="iwant" jako dzieci rodzica div, niezależnie od typu lub klasy. Może to zaspokoić twoją potrzebę w zależności od struktury twojego HTML, więc warto spróbować. Jeśli jednak nazwy klas są dla ciebie problemem, to prawdopodobnie nie ma zbyt wiele rozwiązań, ponieważ w CSS nie ma pseudo-klasy :only-of-class, która filtruje według klas i ignoruje resztę.

+0

To może być rozwiązaniem, ale wolę coś bardziej ogólny, ponieważ nie może być dodatkowe 'div's. Ale dobre myślenie. –

1

Brak selektora CSS dla negatywnego rodzica. Użyj wybieraka rodzeństwo, aby ustawić nowe style, a następnie zresetować style w .idontwant:

div.iwant { 
    /*Set CSS here*/ 
    display: inline; 
} 
div.iwant ~ div.idontwant { 
    /*Reset CSS*/ 
    display: block /* Default of DIV is block*/ 
} 
+0

To zbyteczne, ponieważ każda klasa wzajemnie się wyklucza. – BoltClock

+0

@BoltClock Co masz na myśli? Selektor "div.iwant ~ div.idontwant" jest bardziej szczegółowy niż "div.iwant". –

+2

Nie ustawiam stylów, chcę uzyskać te elementy dla przeszukiwacza i wolałbym to zrobić w jednym zapytaniu. –