<b>3.11 便捷方法</b>
<b>3.11.1 sizzle.matches(</b>
expr, set )
便捷方法sizzle.matches( expr, set )使用指定的选择器表达式expr对元素集合set进行过滤,并返回过滤结果。
该方法通过简单地调用函数sizzle( selector, context, results, seed )来实现,调用时会将元素集合set作为参数seed传入。
相关代码如下所示:
4043 sizzle.matches =
function( expr, set ) {
4044
return sizzle( expr, null, null, set );
4045 };
<b>3.11.2 sizzle.matchesselector(</b>
node, expr )
便捷方法sizzle.matchesselector( node, expr )用于检查某个元素node是否匹配选择器表达式expr。
如果浏览器支持原生方法matchesselector()、mozmatchesselector()、webkitmatchesselector()、msmatchesselector()中的一种,则尝试调用原生方法检查元素与选择器表达式是否匹配;如果浏览器不支持原生方法,或者支持但是检查失败(抛出异常),则调用函数sizzle( selector, context, results, seed ),检查其返回值的长度是否大于0,调用时会将元素node封装成数组作为参数seed传入。
4047 sizzle.matchesselector
= function( node, expr ) {
4048
return sizzle( expr, null, null, [node] ).length > 0;
4049 };
5095 (function(){
5096
var html = document.documentelement,
5097
matches = html.matchesselector || html.mozmatchesselector ||
html.webkitmatchesselector || html.msmatchesselector;
5098
5099
if ( matches ) {
5100
// check to see if it's possible to do matchesselector
5101
// on a disconnected node (ie 9 fails this)
5102
var disconnectedmatch = !matches.call( document.createelement(
"div" ), "div" ),
5103 pseudoworks = false;
5104
5105
try {
5106 // this should fail with an
exception
5107 // gecko does not error, returns
false instead
5108 matches.call(
document.documentelement, "[test!='']:sizzle" );
5109
5110
} catch( pseudoerror ) {
5111 pseudoworks = true;
5112
}
5113
5114
sizzle.matchesselector = function( node, expr ) {
5115 // make sure that attribute
selectors are quoted
5116 expr =
expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
5117
5118 if ( !sizzle.isxml( node ) ) {
5119 try {
5120 if ( pseudoworks ||
!expr.match.pseudo.test( expr ) && !/!=/.test( expr ) ) {
5121 var ret =
matches.call( node, expr );
5122
5123 // ie 9's
matchesselector returns false on disconnected nodes
5124 if ( ret ||
!disconnectedmatch ||
5125 // as well,
disconnected nodes are said to be in a document
5126 // fragment in
ie 9, so check for that
5127 node.document
&& node.document.nodetype !== 11 ) {
5128 return ret;
5129 }
5130 }
5131 } catch(e) {}
5132 }
5133
5134 return sizzle(expr, null, null,
[node]).length > 0;
5135
};
5136
5137 })();