jQuery.API源码深入剖析以及应用实现 - 核心函数篇
2010-09-14 13:38:00 来源:WEB开发网先看下表达式不包含“,”符号的时候,调用pushStack方法,方法为:
//将一系列元素推入栈中
pushStack:function(elems,name,selector){
varret=jQuery(elems);
//将上个对象的引用推入栈中
ret.prevObject=this;
ret.context=this.context;
//关键字为find时,在原有selector的基础上,继续增加selector
//如$("div").find("p")意思就是$("divp")
if(name==="find")
ret.selector=this.selector+(this.selector?"":"")+selector;
elseif(name)
ret.selector=this.selector+"."+name+"("+selector+")";
//返回最新的Jquery对象
returnret;
}
注意这里看到 ret.prevObject= this; 这个方法在$(...).andSelf()和$(...).end()中调用,对于筛选或查找后的元素,返回前一次元素状态它是很有用的。
接着调用 jQuery.find( selector, this[0], ret ); ,首先我们看到有这样的几句代码:
jQuery.find=Sizzle;
jQuery.filter=Sizzle.filter;
jQuery.expr=Sizzle.selectors;
jQuery.expr[":"]=jQuery.expr.filters;
//……
window.Sizzle=Sizzle;
jQuery.find方法转去调用全局的Sizzle对象了(实际上这里运用到了Javascript设计模式中的适配器模式,jquery.find实际上调用的是Sizzle的对象。关于Javascript适配器模式,我将接下来的Javascript乱弹设计模式系列文章中具体叙述),Sizzle对象定义为:
更多精彩
赞助商链接