Dlaczego pseudo funkcjonalne, takie jak: not () i: has () pozwalają na cytowanie argumentów?

Najwyraźniej, jak odkryłem podczas komentowaniakolejna odpowiedź, jQuery (raczej jego podstawowy silnik selektoraTrzask) pozwala cytować argument do:not() selektor jak również:has() selektor.Dowcip:

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

wStandardowe selektory, cudzysłowy są zawsze reprezentatywne dla ciągu, a nie dla selektora lub słowa kluczowego, więc cytowanie argumentu do:not() jest zawsze nieprawidłowy.Nie zmieni się to w selektorach 4.

Możesz także zobaczyć, że jest to niestandardowa składnia przez dodanienieobsługiwany selektor CSS Jak na przykład:nth-last-child(1) powodując całkowitą awarię selektora:

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

Czy jest jakiś dobry powód, techniczny lub inny, pozwalający na cytowanie tutaj? Jedyne możliwości, które przychodzą do głowy to:

Spójność z:contains() co pozwala na cytowane i niecytowane argumenty, jak widać wstara specyfikacja selektorów. Z wyjątkiem:contains() akceptuje ciągi / słowa kluczowe, a nie selektory ...

Spójność z implementacją niestandardowych pseudo za pomocą$.expr[':'], która zawsze pozwala na cytowane i niecytowane argumenty.

Spójność i łatwość przenoszenia do ich odpowiedników metod.not() i.has() (wystarczy usunąć lub podzielić zewnętrzne cudzysłowy i zmienić dwukropki na kropki?).

Ale nie mogę znaleźć żadnych źródeł, które mogłyby im pomóc lub przeciwstawić się. W rzeczywistości, możliwość cytowania samych argumentów selektora również nie jest nigdzie udokumentowana, ani też nie wydaje się, aby istniała jakakolwiek różnica między cytowaniem a nie cytowaniem argumentu:

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

questionAnswers(1)

yourAnswerToTheQuestion