Warum erlauben funktionale Pseudos wie: not () und: has () Argumente in Anführungszeichen?

Anscheinend, wie ich beim Kommentieren festgestellt habeeine andere Antwort, jQuery (eher die zugrunde liegende Auswahlmaschine)Brutzeln) können Sie das Argument zu zitieren:not() Selektor sowie die:has() Wähler.Nämlich:

$('div:not("span")')
$('span:has("span")')

In demSelektoren Standard, Anführungszeichen sind immer repräsentativ für eine Zeichenfolge und niemals für einen Selektor oder ein Schlüsselwort:not() ist immer ungültig.Dies ändert sich in Selectors 4 nicht.

Sie können auch feststellen, dass es sich um eine nicht standardmäßige Syntax handelt, indem Sie ein hinzufügenNicht unterstützter CSS-Selektor sowie:nth-last-child(1) wodurch der Selektor vollständig ausfällt:

$('div:not("span"):nth-last-child(1)')
$('span:has("span"):nth-last-child(1)')

Gibt es einen guten technischen oder sonstigen Grund, hier Angebote zuzulassen? Die einzigen Möglichkeiten, die mir in den Sinn kommen, sind:

Übereinstimmung mit:contains() Dies erlaubt sowohl zitierte als auch nicht zitierte Argumente, wie indie alten Selectors spec. Außer:contains() akzeptiert Strings / Keywords, keine Selektoren ...

Konsistenz mit der Implementierung von benutzerdefinierten Pseudos mit$.expr[':'], das immer Argumente in Anführungszeichen und ohne Anführungszeichen zulässt.

Konsistenz und einfache Portierung auf die entsprechenden Methoden.not() und.has() (Entfernen oder teilen Sie einfach die äußeren Anführungszeichen und ändern Sie die Doppelpunkte in Punkte?).

Aber ich kann keine Quellen finden, die sie unterstützen oder ablehnen. Tatsächlich ist die Möglichkeit, Selektorargumente selbst in Anführungszeichen zu setzen, nirgendwo dokumentiert, und es scheint keinen Unterschied zwischen dem Zitieren und dem Nichtzitieren des Arguments zu geben:

$('div:not(span)')
$('span:has(span)')

Antworten auf die Frage(1)

Ihre Antwort auf die Frage