jquery1.0源码解读
filter函数首先根据参数not确定是不是筛选出不满足参数t的:
1.not为true时筛选出不满足参数t的元素:
构造function(a,f) {return jQuery.grep(a,f,true);}
,因为要传递true,所以只能构造。
2.not为false时筛选出满足参数t的元素:调用jQuery.grep
然后根据while ( t && /^[a-z[({<*:.#]/i.test(t) )
来循环筛选元素
1.必须满足/^[a-z[({<*:.#]/i
正则才会进入while
循环,否则直接返回return { r: r, t: t };
2.进入循环后就开始应用jQuery.parse
数组循环筛选:
因为jQuery.parse数组中包含S,Q两个正则常量:
1.//Look for a string-like sequence
replace( ‘S’, “([a-z-][a-z0-9-])” )
就是要找类似字符串的
2.//Look for something (optionally) enclosed with quotes
.replace( ‘Q’, “ ‘?\”?([^’\”]?)’?\”? *” ), “i” );
寻找通过引号关闭的
如果满足parse数组中的某个,那么就跳出for循环,这时候t = t.replace( re, "" )
,t就把满足正则的替换为空了(ps:一般到这t就为空了。)
3.如果匹配出的结果中包含not,那么就递归进入filter继续筛选出not的元素。
4.如果没有not,那么就根据jQuery.expr
找出符合筛选规则的函数进行eval
因为要传入字符串,所以用eval
1
2
3eval("f = function(a,i){" +
( m[1] == "@" ? "z=jQuery.attr(a,m[3]);" : "" ) +
"return " + f + "}");
最后通过grep函数传入f规则函数 再筛选出剩余的元素。