2010-10-17 7 views
19

क्या किसी के पास अनुभव/अंतर्दृष्टि है: jquery/sizzle decoupling?decoupling jquery, sizzle?

यह सामान्य हित के लिए है, लेकिन यहाँ परिदृश्य है कि मेरे सवाल शुरू हो रहा है:

..i पहले से ही इस परियोजना में jQuery है। http://ecsstender.org/ को आजमाने की कोशिश करना चाहता था, जिसके लिए सिज़ल चयनकर्ता इंजन की आवश्यकता होती है। http://forum.jquery.com/topic/further-decoupling-sizzle-and-jquery

  • उदहारण के लिए: अपने पहले ही jQuery का हिस्सा ..

    • बल्कि कुछ इस तरह करना होगा - मैं न वास्तव में कड़ाके की धूप के 2 प्रति शामिल करना चाहते हैं एक jquery build बनाएं जो सिग्ले के एम्बेडेड संस्करण के बजाय बाहरी पर निर्भर करता है - इसलिए एक ही Sizzle lib का उपयोग jquery, eccstender, या अन्य स्क्रिप्ट द्वारा किया जा सकता है।

    एक अच्छा विचार लगता है। हालांकि मुझे लगता है कि यह प्रदर्शन को प्रभावित कर सकता है, और मैं jQuery उत्पादन रिहाई के खिलाफ तुलना बेंचमार्किंग को देखने के लिए चाहते हो जाएगा ..

    किसी को भी पता है अगर यह किया गया है? (जिथब कांटा?) या इस दृष्टिकोण के खिलाफ कोई अच्छा कारण है? ।

  • उत्तर

    30

    jQuery निर्माण में शामिल होने के लिए Sizzle की आवश्यकता नहीं है। इसे हटाया जा सकता है ... jQuery कोड all references Sizzle., आप बस स्वयं को jQuery को पकड़/संकलित कर सकते हैं (पहले से ही सिज़ल समेत) और इसे किसी भी अन्य लाइब्रेरी के सामने उजागर किया है (वास्तव में इसे संकलित संस्करण में शामिल नहीं है, बस बंद करने के लिए एक बाहरी के रूप में संकलक)।


    यहाँ विकल्प है यह एम्बेडेड छोड़ देते हैं, लेकिन बाहर उपयोग के लिए कड़ाके की धूप का पर्दाफाश करने के:

    क्या आप जानते हैं jQuery (निर्भरता) का उपयोग किया जाएगा, बस jQuery के बाद इस जोड़ें:

    ​window.Sizzle = jQuery.find; 
    

    यह उस संपत्ति के रूप में Sizzle को फिर से एक्सपोज़ कर देगा जिसका आप उपयोग कर सकते हैं। आप इस देखेंगे

    jQuery में (version 1.4.3 link):

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

    केवल के साथ उस अनुभाग बदलें


    यहाँ एम्बेड करने कड़ाके की धूप को दूर करने के मैनुअल संस्करण है:

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

    तो आपको Sizzle jQuery से पहले सभी में शामिल करने की आवश्यकता है और यह ठीक काम करेगा।

    Here's a fiddle showing it working, जिथब से सीधे सिज़ल समेत, jQuery में एम्बेडेड नहीं है।

    +0

    कमाल! बहुत धन्यवाद निक :) – zack

    +0

    @zack - स्वागत है :) –

    +2

    गंभीरता से महान जवाब। – weisjohn

    2

    आप कड़ाके की धूप jQuery में बंडल के साथ eCSStender CSS3 चयनकर्ता मॉड्यूल का उपयोग करना चाहते हैं, तो आप ऐसा कर सकते हैं:

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

    एक आसान तरीका सीधे एक वास्तविक तत्व संग्रह (एक से प्राप्त करने के लिए नहीं बल्कि हो सकता है एक सरणी का उपयोग कर नकली), लेकिन यह अभी तक शुरुआती है और मेरा दिमाग अभी तक काम नहीं कर रहा है।