2010-10-17 11 views
19

Qualcuno ha esperienza/intuizione: disaccoppiamento jquery/sfrigolio?disaccoppiamento jquery, sfrigolare?

questo è per l'interesse generale, ma qui è lo scenario che ha attivato la mia domanda:

..i già jquery nel progetto. volevo provare http://ecsstender.org/, che richiede il motore di selezione Sizzle. Non voglio davvero per includere una seconda copia di Sizzle - la sua già parte di jQuery ..

Sembra una buona idea. Anche se immagino che possa fare male a performace, e vorrei vedere confronti comparativi con la release di produzione di jQuery.

Qualcuno sa se questo è stato fatto? (github fork?) O c'è una buona ragione contro questo approccio? .

risposta

30

Non è necessario che Sizzle sia incluso nella build di jQuery. Può essere rimosso ... il codice jQuery all references Sizzle., puoi semplicemente prendere/compilare jQuery da solo (incluso Sizzle in anticipo) e farlo esporre a qualsiasi altra libreria (in realtà non includendolo nella versione compilata, proprio come un extern alla chiusura compilatore).


Ecco la possibilità di lasciare incorporato, ma esporre Sizzle per uso esterno:

Se si conosce jQuery verrà utilizzato (dipendenza), basta aggiungere questo dopo jQuery:

​window.Sizzle = jQuery.find; 

Questo esporrà Sizzle come proprietà che è possibile utilizzare.


Ecco la versione manuale per rimuovere Sizzle di essere incorporato:

In jQuery (version 1.4.3 link) vedrete questo:

/*! 
* 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; 

})(); 

Sostituire quella sezione con solo:

(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;  
})(); 

Quindi tutto quello che devi fare è includere Sizzleprima di jQuery e funzionerà correttamente.

Here's a fiddle showing it working, incluso Sizzle direttamente da github, non incorporato in jQuery.

+0

fantastico! molte grazie Nick :) – zack

+0

@zack - welcome :) –

+2

Davvero un'ottima risposta. – weisjohn

2

Se si desidera utilizzare le eCSStender CSS3 selettori modulo con il Sizzle bundle in jQuery, si può fare:

eCSStender.addMethod('findBySelector',function(selector){ 
    var els = []; 
    jQuery(selector).each(function(){ 
    els.push(this); 
    }); 
    return els; 
}); 

Ci può essere un modo più semplice per ottenere direttamente una collezione elemento reale (piuttosto che un falso usando un array), ma è ancora presto e il mio cervello non funziona ancora abbastanza.

Problemi correlati