Estoy en proceso de actualizar un sitio que actualmente usa jQuery 1.3.2 a al menos 1.10.2. Cuando lo hago, el sitio se ahoga con comandos como este:
this.form.find(':select[name="fieldtype"]'); Esto no debería funcionar, debería ser: this.form.find('select[name="fieldtype"]'); - sin los dos puntos - pero de hecho funciona.
No he encontrado nada que sugiera que ':select...' es válido. ¿Es posible que los dos puntos simplemente se ignoraran en jQ 1.3.2?
EDITAR :
Me olvidé por completo de los pseudoselectores personalizados. Si, para fines heredados, necesita una versión más nueva de jQuery para tratar :select como select , puede hacer esto:
jQuery.extend(jQuery.expr[':'], { select: function (el) { return jQuery(el).is('select'); } }); Y ahora jQuery(':select') y jQuery('select') son expresiones equivalentes.
Explicación
Parece ser un error con el motor de selección sizzle css utilizado por jquery, por lo que jquery podría seleccionar elementos dom antes de document.querySelectorAll fuera una cosa (o una cosa ampliamente disponible). jQuery 1.3.2 usa sizzle 0.9.3 (¡anterior a la versión 1!), la próxima versión de jQuery, 1.4.0, usa sizzle 1.0.0, donde el error no está presente.
El error parece ser específicamente que las etiquetas adecuadas con el prefijo ":" se interpretarán como una etiqueta en lugar de un pseudo no válido.
Puedes verificar que sizzle es el culpable:
Su versión "híbrida 1.3.2" ahora también rechazará el selector.