解散jquery,嘶嘶声?

时间:2010-10-17 10:21:47

标签: jquery sizzle

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

这是为了普遍的兴趣,但这是触发我的问题的场景:

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

似乎是一个好主意。虽然我猜它可能会影响性能,但我希望看到基准测试与jQuery生产版本的比较..

有人知道这是否已经完成? (github fork?)或者有没有理由反对这种方法?

2 个答案:

答案 0 :(得分:30)

不需要将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;    
})();

然后你需要做的就是在 jQuery之前加入Sizzle ,它会正常工作。

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

答案 1 :(得分:2)

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

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

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