有谁有经验/洞察力:解耦jquery / sizzle?
这是为了普遍的兴趣,但这里的情况触发了我的问题:
在项目中已经有jquery。想要尝试http://ecsstender.org/,这需要Sizzle选择器引擎。
我真的不想包括Sizzle的第二个副本 – 它已经是jquery的一部分。
>宁愿做这样的事情:http://forum.jquery.com/topic/further-decoupling-sizzle-and-jquery
>例如创建一个取决于Sizzle的外部而不是嵌入式版本的jquery构建 – 所以同样的Sizzle lib可以被jquery,eccstender或其他脚本使用。
似乎是个好主意虽然我猜这可能会伤害到性能,我想要看看与jQuery生产版本的基准比较。
解决方法
没有必要将Sizzle包含在jQuery构建中。它可以被删除… 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中。