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)')