上面一篇文章說的sizzle的利器之一find函式sizzle選擇器揭秘--sizzle選擇器
這篇介紹sizzle的另一利器filter函式
1: sizzle.filter = function(expr, set, inplace, not)
20: //用於縮小結果集
21: if ( curloop === result )
24: //對結果集進行預過濾 prefilter中有 class id tag child attr pseudo pos,關於順序問題後面介紹
25: //預處理的作用是對特殊過濾型別進行處理和對過濾型別引數進行預處理
26: if ( expr.prefilter[ type ] ) else if ( match === true )
36: }
37: //提出特殊情況,執行以下語句
38: if ( match ) else
52: } else if ( pass )
56: }
57: }
58: }
59:
60: if ( found !== undefined )
65: //如果過濾成功的話則將相應的引數位置設為「」
66: expr = expr.replace( expr.match[ type ], "" );
67:
68: //沒有符合條件的返回
69: if ( !anyfound )
72: //過濾成功的就跳出內層迴圈,在從pseudo到pos進行新一輪過濾
73: break;
74: }
75: }
76: }
77: //如果先後過濾字串一樣則過濾字串有問題
78: // improper expression
79: if ( expr === old ) else
85: }
86:
87: old = expr;
88: }
89: //最後返回最後過濾過的結果集
90: return curloop;
91: };
其實雖然過濾和預過濾都是按照一定的過濾型別進行過濾,但是在進行匹配過濾字元換時是按照從右往左的順序進行因為正規表示式中有乙個負向前瞻(?!……)(?!.....)
舉例來說乙個過濾字串 li:enabled.sel 在匹配這個字串時先匹配pseudo時是匹配不成功的。最先匹配的是.sel(class),然後才是:enabled 最後是li(tag).
其實sizzle中最重要的就是這兩個函式,下面一片文章是關於sizzle,如果這兩篇文章看懂了,後面應該是很輕鬆。
JQuery選擇器Sizzle詞法分析器的理解
sizzle 的簡介 sizzle是jquery 中,內部實現選擇器詞法分析的物件,而tokenize 則是將類似 div classname a attrname name 這樣的選擇器,經過序列化成乙個陣列,裡面的每個單元是乙個標籤 可以是 tag,classname,連線符 等 最終返回這個陣...
sizzle分析記錄 自定義偽類選擇器
可見性 隱藏物件沒有寬高,前提是用display none處理的 jquery.expr.filters.hidden function elem jquery.expr.filters.visible function elem 內容獲取文字內容通過indexof匹配 contains markf...
sizzle分析記錄 自定義偽類選擇器
可見性 隱藏物件沒有寬高,前提是用display none處理的 jquery.expr.filters.hidden function elem jquery.expr.filters.visible function elem 內容獲取文字內容通過indexof匹配 contains markf...