Sto progettando un motore di selezione JavaScript, e al momento sono concentrato sull'analisi della stringa del selettore. In particolare, combinatori.
I combinatori CSS3 che conosco sono:
-
>
(figli) -
space
(discendenti) -
+
(prossimo fratello) -
~
(tutti i prossimi fratelli)
Che va bene per come funziona il CSS (come vengono applicate le regole di stile). Tuttavia, ora sto realizzando (ora che sto esaminando questo paradigma più da vicino) che questo sembra un po 'limitante in un'impostazione JavaScript.
Di seguito ho creato un elenco alternativo di combinatori. Quello che vorrei sapere è:
- I motori di selezione attuali si allontanano dai metodi di selezione CSS standard? (Conosco Sizzle e Sly, ma nessuno degli altri)
- Vedi qualche motivo per cui nessuno dei combinatori che ho elencato non funzionerebbe bene?
- Pensi che avere più opzioni per le stringhe di selettore (più combinatori, più filtri, ecc.) sia vantaggioso o solo un rifiuto / confuso / stupido / etc?
Grazie in anticipo per i tuoi pensieri!
-
>
(figli) -
>>
(discendenti) (anche, lo spazio funzionerebbe ancora) -
+
(prossimo fratello) -
++
(tutti i prossimi fratelli) (anche, tilde avrebbe comunque funzionato) -
-
(fratello precedente) -
--
(tutti i fratelli precedenti) -
*
(fratelli precedenti e successivi) -
**
(tutti i fratelli) -
^
(genitore)
Esempio 1: div ^ span
- ottieni tutti gli spazi con un figlio div
Esempio 2: div ** span
- ottieni tutti i fratelli di span di div
Esempio 3: .lastListItem -- li
- tutti li precedenti al li con la classe .lastListItem
Esempio 4: #thing ^ div ** .error
- tutti gli elementi con classe .error
che sono fratelli di genitore di # thing (supponendo che il genitore di # thing sia un div)
P.S. Oh, e ho anche pensato di avere un personaggio segnaposto che potesse rappresentare un semplice selettore. Quindi, l'Esempio 4 potrebbe apparire come questo (con un carattere di sottolineatura come segnaposto):
Esempio 4 alt: #thing ^ _ ** .error
- tutti gli elementi con classe ".error" che sono i fratelli di genitore di # thing (non importa che tipo di elemento # il genitore della cosa sia)