天天看點

jQuery技術内幕:深入解析jQuery架構設計與實作原理. 3.11 便捷方法

<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 &gt; 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 ) &amp;&amp; !/!=/.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

&amp;&amp; node.document.nodetype !== 11 ) {

5128                             return ret;

5129                         }

5130                     }

5131                 } catch(e) {}

5132             }

5133

5134             return sizzle(expr, null, null,

[node]).length &gt; 0;

5135        

};

5136    

5137 })();

繼續閱讀