¿Por qué los pseudos funcionales tales como: not () y: has () permiten argumentos citados?
Al parecer, como he descubierto al comentar sobreotra respuesta, jQuery (más bien su motor selector subyacente)Chisporrotear) le permite citar el argumento a la:not()
selector así como el:has()
selector.Esto es:
$('div:not("span")')
$('span:has("span")')
En elSelectores estandar, las comillas son siempre representativas de una cadena y nunca de un selector o una palabra clave, por lo que citan el argumento a:not()
siempre es inválidoEsto no cambiará en los selectores 4.
También puede ver que es una sintaxis no estándar agregando unSelector de CSS no compatible como:nth-last-child(1)
haciendo que el selector falle completamente:
$('div:not("span"):nth-last-child(1)')
$('span:has("span"):nth-last-child(1)')
¿Hay alguna buena razón, técnica o de otro tipo, para permitir citas aquí? Las únicas posibilidades que vienen a la mente son:
Consistencia con:contains()
que permite tanto los argumentos citados como los no citados, como se ve enla vieja especificación selectores. Excepto:contains()
acepta cadenas / palabras clave, no selectores ...
Consistencia con la implementación de pseudos personalizados utilizando.$.expr[':']
, que siempre permite argumentos entre comillas y sin comillas.
Consistencia y facilidad de adaptación a sus homólogos de método..not()
y.has()
(¿simplemente eliminar o dividir las comillas externas y cambiar los dos puntos a puntos?).
Pero no puedo encontrar ninguna fuente para apoyarlos o oponerme. De hecho, la capacidad de citar los argumentos selectores tampoco está documentada en ninguna parte, ni parece haber ninguna diferencia entre citar y no citar el argumento:
$('div:not(span)')
$('span:has(span)')