简析Sizzle.matchesSelector

在讲到matchesSelector时,风之石同学提到Sizzle里也提供了。于是从github上取下最新的sizzle看了下。相关的代码如下:

Sizzle.matches = function( expr, set ) {
return Sizzle( expr, null, null, set );
};

Sizzle.matchesSelector
= function( node, expr ) {
return Sizzle( expr, null, null, [node] ).length > 0;
};

这是一个很有用的接口,sizzle一直没有提供,我甚至一直因这一点而说"sizzle像个半成品"。---看来说话要小心啊,需要时刻关注事态的发展。

可以看到,这两个方法里都没有refEl的参数,这种做法与firefox的实现一致:https://developer.mozilla.org/en/DOM/Node.mozMatchesSelector

但是相对于dom2标准http://dev.w3.org/2006/webapi/selectors-api2/#matchtesting缺少一个refEl的参数

顺便看一下与Sezzle.matches功能相似的QW.Selector.filter

/**
* 用一个css selector来过滤一个数组.
* @method filter
* @static
* @param {Array|Collection} els: 元素数组
* @param {string} sSelector: 过滤selector,这个selector里的第一个关系符不可以是“+”“~”。
* @param {Element} pEl: 父节点。默认是document
* @returns {Array} : 返回满足过滤条件的元素组成的数组。
*/
Selector.filter
= function(els, sSelector, pEl) {
//...
}

因为缺少refEl的参数,可怜的jquery,看来还是需要自己想法来弥补这个缺憾来做delegate,因为delegate的selector是有参考性的。


另,在《解密Selector》序列中讲matchesSelector时有更详尽的叙述:
http://www.cnblogs.com/jkisjk/archive/2011/05/23/qwrap_selector_matchselector.html

再另:最新的sizzle.js经YUI_Com压后,竟然有15.1K,有点偏大啊,比较了jqueyr1.4.2所使用的sizzle,好像除了matchesSelector,并没有新加什么功能。----QW.Selector的YUI压后大小是8K。

原文地址:https://www.cnblogs.com/jkisjk/p/sizzle_matchesselector_and_qw_selector_filter.html