解耦jquery,嘶嘶声?

发布于 2024-09-27 15:27:30 字数 644 浏览 4 评论 0原文

有谁有关于解耦 jquery / sizzle 的经验/见解吗?

这是为了一般利益,但这里的场景引发了我的问题:

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

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

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

Does anyone have experience / insight re: decoupling jquery / sizzle?

this is for general interest, but here's the scenario that triggered my question:

..i already have jquery in the project. wanted to try out http://ecsstender.org/, which requires the Sizzle selector engine.
I dont really want to include a 2nd copy of Sizzle - its already part of jquery ..

Seems a good idea. Although I guess it could hurt performace, and I would want to see benchmarking comparisons against the jQuery production release..

Does anyone know if this has been done ? (github fork?) Or is there a good reason against this approach?
.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扛刀软妹 2024-10-04 15:27:30

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

})();

将该部分替换为 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;    
})();

然后您需要在 include Sizzle before jQuery 并且它会正常工作。

这是一个显示其工作原理的小提琴,包括直接来自 github 的 Sizzle,不是 嵌入 jQuery。

There's no need for Sizzle to be included in the jQuery build. It can be removed...the jQuery code all references Sizzle., you can just grab/compile jQuery yourself (including Sizzle beforehand) and have it exposed to any other library (not actually including it in the compiled version, just as an extern to the closure compiler).


Here's the option to leave it embedded, but expose Sizzle for outside use:

If you know jQuery will be used (dependency), just add this after jQuery:

​window.Sizzle = jQuery.find;

This will re-expose Sizzle as a property you can use.


Here's the manual version to remove Sizzle from being embedded:

In jQuery (version 1.4.3 link) you'll see this :

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

})();

Replace that section with 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;    
})();

Then all you need to do in include Sizzle before jQuery and it'll work fine.

Here's a fiddle showing it working, including Sizzle directly from github, not embedded in jQuery.

苄①跕圉湢 2024-10-04 15:27:30

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

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

可能有一种更简单的方法来直接获取实际的元素集合(而不是使用数组的假集合),但现在还为时过早我的大脑还不能正常工作。

If you want to use the eCSStender CSS3 Selectors Module with the Sizzle bundled in jQuery, you can do that:

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

There may be an easier way to directly get an actual element collection (rather than a fake one using an array), but it's early yet and my brain isn't working quite yet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文