Por que os pseudos funcionais como: not () e: has () permitem argumentos citados?
Aparentemente, como eu descobri ao comentaroutra resposta, jQuery (em vez disso, seu mecanismo de seleção subjacenteChiar) permite citar o argumento para o:not()
selector, bem como o:has()
selector.A saber:
$('div:not("span")')
$('span:has("span")')
NoSeletores padrão, aspas são sempre representativas de uma string e nunca de um seletor ou uma palavra-chave, então citando o argumento para:not()
é sempre inválido.Isso não será alterado nos Seletores 4.
Você também pode ver que é uma sintaxe não padrão adicionando umaseletor CSS não suportado tal como:nth-last-child(1)
fazendo com que o seletor falhe completamente:
$('div:not("span"):nth-last-child(1)')
$('span:has("span"):nth-last-child(1)')
Existe algum bom motivo, técnico ou não, para permitir orçamentos aqui? As únicas possibilidades que vêm à mente são:
Consistência com:contains()
que permite tanto argumentos citados como não citados, como visto ema antiga especificação dos Seletores. Exceto:contains()
aceita cadeias / palavras-chave, não seletores ...
Consistência com a implementação de pseudos personalizados usando$.expr[':']
, que sempre permite argumentos citados e não citados.
Consistência e facilidade de portabilidade para seus equivalentes de métodos.not()
e.has()
(apenas remova ou divida as aspas externas e troque os dois pontos por pontos).
Mas não consigo encontrar fontes para apoiá-las ou opor-se a elas. Na verdade, a capacidade de citar argumentos do seletor em si não é documentada em nenhum lugar, tampouco parece haver qualquer diferença entre citar e não citar o argumento:
$('div:not(span)')
$('span:has(span)')