代码之家  ›  专栏  ›  技术社区  ›  zack

分离jquery,sizzle?

  •  19
  • zack  · 技术社区  · 14 年前

    是否有人有经验/洞察力重新:分离jquery/sizzle?

    这是为了大家的兴趣,但下面是引发我问题的场景:

    …我已经在项目中有jquery了。想试试看 http://ecsstender.org/ ,这需要sizzle选择器引擎。 我真的不想包括第二份sizzle——它已经是jquery的一部分了。

    似乎是个好主意。虽然我想这可能会影响性能,我想看看与jquery产品版本的基准比较。

    有人知道这是否已经完成了吗?(吉特福克?)还是有充分的理由反对这种方法? .

    2 回复  |  直到 13 年前
        1
  •  30
  •   thirtydot    13 年前

    不需要在jquery构建中包含sizzle。它可以被删除…jquery代码 all references Sizzle. 您可以自己获取/编译jquery(包括sizzle),并将其公开给任何其他库(实际上不包括在编译版本中,就像闭包编译器的外部一样)。


    这里有一个选项可以让它保持嵌入状态,但可以公开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;
    
    })();
    

    将该节替换为 只有 :

    (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 包括直接从Github发出的sizzle, 嵌入在jquery中。

        2
  •  2
  •   Aaron Gustafson    14 年前

    如果要将ecsstender css3选择器模块与jquery中捆绑的sizzle一起使用,可以这样做:

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

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