【问题标题】:decoupling jquery, sizzle?解耦jquery,嘶嘶声?
【发布时间】:2011-04-26 13:16:15
【问题描述】:

有没有人有经验/洞察力:解耦 jquery / sizzle?

这是出于普遍的兴趣,但这是引发我问题的场景:

..我已经在项目中有 jquery。想试试http://ecsstender.org/,它需要 Sizzle 选择器引擎。 我真的不想包含 Sizzle 的第二个副本 - 它已经是 jquery 的一部分..

似乎是个好主意。虽然我猜这可能会损害性能,但我希望看到与 jQuery 生产版本的基准比较..

有谁知道这是否已经完成? (github fork?)或者是否有充分的理由反对这种方法? .

【问题讨论】:

    标签: jquery sizzle


    【解决方案1】:

    没有必要将 Sizzle 包含在 jQuery 构建中。它可以被删除...jQuery代码all references Sizzle.,您可以自己抓取/编译jQuery(包括预先包含Sizzle)并将其暴露给任何其他库(实际上并未将其包含在编译版本中,只是作为extern闭包编译器)。


    下面是保留嵌入的选项,但将 Sizzle 公开以供外部使用:

    如果你知道会用到 jQuery(依赖),就在 jQuery 后面加上这个:

    ​window.Sizzle = jQuery.find;
    

    这会将 Sizzle 重新公开为您可以使用的属性。


    这是从嵌入中移除 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;
    
    })();
    

    将该部分替换为only

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

    然后你需要做的所有事情包括Sizzlebefore jQuery 就可以了。

    Here's a fiddle showing it working,包括直接来自 github 的 Sizzle,嵌入在 jQuery 中。

    【讨论】:

      【解决方案2】:

      如果您想将 eCSStender CSS3 选择器模块与 jQuery 中捆绑的 Sizzle 一起使用,您可以这样做:

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

      可能有一种更简单的方法可以直接获取实际元素集合(而不是使用数组的虚假集合),但现在还为时过早,我的大脑还没有完全运转。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        相关资源
        最近更新 更多