riddle - desacoplamiento jQuery, chisporroteo?
jquery selectivizr (2)
¿Alguien tiene experiencia / conocimiento en relación con el desacoplamiento de jquery / sizzle?
esto es para el interés general, pero aquí está el escenario que provocó mi pregunta:
..yo ya tengo jQuery en el proyecto. quería probar http://ecsstender.org/ , que requiere el motor de selección Sizzle. Realmente no quiero incluir una segunda copia de Sizzle - ya es parte de jquery ...
- preferiría hacer algo como esto: http://forum.jquery.com/topic/further-decoupling-sizzle-and-jquery
- por ejemplo, cree una compilación de jquery que dependa de una versión externa de Sizzle, en lugar de una incrustada, por lo que jquery, eccstender u otros scripts pueden usar la misma libra de Sizzle.
Parece una buena idea. Aunque creo que podría afectar al rendimiento, y me gustaría ver comparaciones comparativas con el lanzamiento de producción de jQuery ...
¿Alguien sabe si se ha hecho esto? (¿Tenedor de github?) ¿O hay una buena razón en contra de este enfoque? .
Si desea utilizar el módulo de selectores CSS3 de eCSStender con el Sizzle incluido en jQuery, puede hacerlo:
eCSStender.addMethod(''findBySelector'',function(selector){
var els = [];
jQuery(selector).each(function(){
els.push(this);
});
return els;
});
Puede haber una forma más fácil de obtener directamente una colección de elementos real (en lugar de una falsa que usa una matriz), pero aún es temprano y mi cerebro todavía no funciona.
No es necesario que Sizzle se incluya en la compilación de jQuery. Se puede eliminar ... el código jQuery todas las referencias Sizzle.
, solo puede capturar / compilar jQuery usted mismo (incluido Sizzle de antemano) y exponerlo a cualquier otra biblioteca (sin incluirlo en la versión compilada, solo como externo al compilador de cierre).
Aquí está la opción de dejarlo incorporado, pero exponer Sizzle para uso externo:
Si sabe que se usará jQuery (dependencia), solo agregue esto después de jQuery:
​window.Sizzle = jQuery.find;
Esto volverá a exponer Sizzle como una propiedad que puedes usar.
Aquí está la versión manual para eliminar Sizzle de incrustarse:
En jQuery ( enlace de la versión 1.4.3 ) verás esto:
/*!
* Sizzle CSS Selector Engine - v1.0
* Copyright 2009, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
(function(){
//...
//lots of code!
//...
// EXPOSE
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;
})();
Reemplace esa sección con sólo :
(function(){
// EXPOSE
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;
})();
Entonces todo lo que necesitas hacer incluye Sizzle antes de jQuery y funcionará bien.
Aquí hay un violín que lo muestra funcionando , incluyendo Sizzle directamente desde github, no incrustado en jQuery.