19

jquery/sizzleの分離に関する経験/洞察を持っている人はいますか?

これは一般的な関心事ですが、私の質問を引き起こしたシナリオは次のとおりです。

..私はすでにプロジェクトに jquery を持っています。Sizzle セレクター エンジンが必要なhttp://ecsstender.org/を試してみたかった。Sizzleの2番目のコピーを含めたくありません-すでにjqueryの一部です..

  • むしろこのようなことをしたい: http://forum.jquery.com/topic/further-decoupling-sizzle-and-jquery
  • たとえば、埋め込みではなく外部バージョンの Sizzle に依存する jquery ビルドを作成します。これにより、jquery、eccstender、またはその他のスクリプトで同じ Sizzle ライブラリを使用できます。

いい考えですね。パフォーマンスが低下する可能性があると思いますが、jQuery の製品リリースとのベンチマーク比較を確認したいと思います..

これが行われたかどうか誰かが知っていますか?(github fork?) または、このアプローチに反対する正当な理由はありますか? .

4

2 に答える 2

31

jQuery ビルドに Sizzle を含める必要はありません。それは削除できます... 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 をインクルードするだけで、問題なく動作します。

これは、jQueryに埋め込まれていない、githubから直接Sizzleを含む、それが機能していることを示すフィドルです。

于 2010-10-17T10:24:31.280 に答える
2

jQueryにバンドルされているSizzleでeCSStenderCSS3セレクターモジュールを使用する場合は、次のように実行できます。

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

(配列を使用した偽のコレクションではなく)実際の要素コレクションを直接取得する簡単な方法があるかもしれませんが、それはまだ初期であり、私の脳はまだ完全に機能していません。

于 2010-10-19T12:10:32.643 に答える