解散jquery,嘶嘶声?

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

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

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

  • 宁愿做这样的事情: http : //forum.jquery.com/topic/further-decoupling-sizzle-and-jquery
  • 例如,创建一个依赖于Sizzle的外部而非嵌入式版本的jquery构建 – 所以jquery,eccstender或其他脚本可以使用相同的Sizzle库。

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

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

没有必要将Sizzle包含在jQuery构建中。 它可以删除… jQuery代码都引用了Sizzle. ,你可以自己抓取/编译jQuery(包括事先包含Sizzle)并将它暴露给任何其他库(实际上不包括它在编译版本中,就像封闭编译器的外部)。


这是让它嵌入的选项,但是暴露Sizzle供外面使用:

如果你知道将使用jQuery(依赖),只需在jQuery之后添加:

 ​window.Sizzle = jQuery.find; 

这将重新暴露Sizzle作为您可以使用的属性。


这是删除Sizzle嵌入的手动版本:

在jQuery( 版本1.4.3链接 )中,您将看到:

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

然后你需要做的就是在jQuery 之前包含Sizzle并且它会正常工作。

这是一个显示它工作的小提琴 ,包括直接来自github的Sizzle, 而不是嵌入在jQuery中。

如果你想在eQuery中使用带有Sizzle的eCSStender CSS3选择器模块,你可以这样做:

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

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