Подтвердить что ты не робот

Развязать jquery, шипение?

Есть ли у кого-нибудь опыт/понимание: развязка jquery/sizzle?

это для общего интереса, но вот сценарий, вызвавший мой вопрос:

.. У меня уже есть jquery в проекте. хотел попробовать http://ecsstender.org/, для чего нужен механизм выбора Sizzle. Я действительно не хочу включать вторую копию Sizzle - ее уже часть jquery..

  • скорее сделает что-то вроде этого: http://forum.jquery.com/topic/further-decoupling-sizzle-and-jquery
  • например. создайте сборку jquery, которая зависит от внешней, а не встроенной версии Sizzle - поэтому тот же Sizzle lib может использоваться jquery, eccstender или другими скриптами.

Кажется хорошей идеей. Хотя я предполагаю, что это может повредить performace, и я хотел бы сравнить сравнительные сравнения с выпуском продукции jQuery.

Кто-нибудь знает, было ли это сделано? (github fork?) Или есть веская причина против такого подхода? .

4b9b3361

Ответ 1

В сборке jQuery нет необходимости включать Sizzle. Его можно удалить... код jQuery все ссылки Sizzle., вы можете просто захватить/скомпилировать jQuery самостоятельно (включая Sizzle заранее) и он подвергается любой другой библиотеке (фактически не включает ее в скомпилированную версию, так же как extern для компилятора закрытия).


Здесь вы можете оставить его встроенным, но выставить 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;    
})();

Затем все, что вам нужно сделать, включите Sizzle перед jQuery, и он будет работать нормально.

Здесь скрипка, показывающая, что он работает, включая Sizzle непосредственно из github, а не встроенный в jQuery.

Ответ 2

Если вы хотите использовать eCSStender CSS3 Selectors Module с Sizzle, входящим в jQuery, вы можете сделать это:

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

Возможно, существует более простой способ прямого получения фактической коллекции элементов (а не поддельной с использованием массива), но это еще рано, и мой мозг еще не работает.