2010-10-17 15 views
19

Herkesin deneyimi/içgörüsü var mı: jquery/sizzle?jupery'yi çözme, sizzle?

bu genel ilgiye, ama burada sorumu tetikleyen senaryo: Zaten projede jquery sahip ..Ben

. Sizzle seçici motoru gerektiren http://ecsstender.org/ denemek istedim. http://forum.jquery.com/topic/further-decoupling-sizzle-and-jquery

  • örn: jquery onun zaten bir kısmını ..

    • ziyade böyle bir şey yapmak istiyorum - yok gerçekten Sizzle bir 2 kopyasını eklemek istediğiniz Sizzle'nin gömülü yerine bir dışa bağlı bir jquery yapısı oluşturun; bu nedenle aynı Sizzle lib, jquery, eccstender veya diğer betikler tarafından kullanılabilir.

    İyi bir fikir gibi görünüyor. Her ne kadar tahmin edemesem de, bu performansa zarar verebilir ve jQuery üretim sürümüne karşı kıyaslama karşılaştırmalarını görmek isterim.

    Bu işlemin bittiğini bilen var mı? (Github çatal?) Ya da bu yaklaşıma karşı iyi bir neden var mı? .

  • cevap

    30

    jQuery yapısına dahil edilmek için Sizzle gerek yoktur. Bu kaldırılabilir ... jQuery kodu all references Sizzle., sadece jQuery (önceden Sizzle dahil) kendiniz/kapmak ve herhangi bir diğer kütüphaneye (aslında derlenmiş bir sürüm dahil değil, kapama için bir extern dahil) derleyici).

    jQuery (bağımlılık) kullanılacaktır biliyorsanız, hemen jQuery sonra bu ekleyin::

    ​window.Sizzle = jQuery.find; 
    
    İşte

    gömülü bırakın, ama dışarıda kullanım için Sizzle maruz seçenek

    Bu, Sizzle'yi kullanabileceğiniz bir özellik olarak yeniden gösterecektir. jQuery yılında

    (version 1.4.3 link) bunu göreceksiniz: sadece ile o bölümü değiştirin

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


    İşte gömülmesini Sizzle kaldırmak için manuel versiyonu:

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

    Yapmanız gereken tek şey, jQuery'den önce Sizzleiçeriyor ve iyi çalışıyor. şirketinden GitHub cızırtı dahil

    Here's a fiddle showing it working

    , jQuery gömülü olmayan.Eğer jQuery gruplanacak Sizzle ile eCSStender CSS3 Seçiciler Modülü kullanmak istiyorsanız

    +0

    harika! çok teşekkürler Nick :) – zack

    +0

    @zack - welcome :) –

    +2

    Ciddi derecede büyük bir cevap. – weisjohn

    2

    , bunu yapabilirsiniz:

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

    doğrudan yerine (gerçek eleman toplama almak için daha kolay bir yolu olabilir Bir dizi kullanarak sahte), ama henüz erken ve beynim henüz tam olarak çalışmıyor.