Supponiamo che io ho il seguente codice HTML:Seleziona elemento meno che non abbia un antenato di una data classe utilizzando solo un selettore
<div class="foo">
<ul>
<li>One</li>
<li>Two</li>
</ul>
</div> <!-- not originally here -->
<div class="bar">
<ul>
<li>Three</li>
<li>Four</li>
</ul>
</div>
voglio selezionare tutti li
elementi che sono non discendenti di un elemento con classe foo
. So che posso farlo con una fantasia filter function, ma mi chiedo se posso farlo solo con un selettore. Per prima cosa ho provato:
$(":not(.foo) li")
Purtroppo questo non funziona in quanto la li
ha altri antenati senza lo stile (il ul
in questo caso). Il seguente sembra funzionare;
$(":not(.foo) :not(.foo) li")
In altre parole, selezionare tutti li
elementi che non hanno antenato che o ha classe foo
o ha un antenato proprio con classe foo
. Forse questo è il migliore/unico modo per farlo con un selettore, ma non mi entusiasma della ripetizione del selettore :not
. Qualche idea migliore là fuori?
Il problema qui è che ': non (.foo) li' non significa "'li' che non ha nessun antenato che ha classe' foo'".Significa "' li' che ha un antenato che non ha classe 'pippo'". La differenza sembra sottile, ma in realtà è una grande differenza. – BoltClock
Sì, esattamente. E il secondo significa 'li' che ha un antenato che non ha classe' pippo' E non ha un proprio antenato con la classe 'pippo'. Quale penso sia il risultato giusto, ma è un modo abbastanza brutto e insoddisfacente per arrivarci. –