batch:function(el,method,o,override){
//让el始终为HTMLElement
el=(el&&(el.tagName||el.item))?el:Y.Dom.get(el);
if(!el||!method){
returnfalse;
}
//确定返回的对象
varscope=(override)?o:window;
//看起来是个HTMLElement或者不是Array
if(el.tagName||el.length===undefined){
returnmethod.call(scope,el,o);
}
varcollection=[];
for(vari=0,len=el.length;i<len;++i){
collection[collection.length]=method.call(scope,el[i],o);
}
returncollection;
},小马补充
batch是YUIDom库的核心之一。它最大的意义在于,它让Dom库的其他大多方法
的第一个参数可以是一个id/元素对象或一组id/元素对象,减少了循环的使用。在这里可以找到call与apply的用法。在了解了batch以后,下来看YUI.util.Dom是怎么使用这一方法的,一口气看两个函数
getStyle:function(el,property){
//toCamel函数后面介绍
property=toCamel(property);
//获取节点的样式
varf=function(element){
returngetStyle(element,property);
};
returnY.Dom.batch(el,f,Y.Dom,true);
},setStyle:function(el,property,val){
property=toCamel(property);
//设置节点的样式
varf=function(element){
setStyle(element,property,val);
};
Y.Dom.batch(el,f,Y.Dom,true);
},有关这两个函数的具体用法,可以看下相关的文档。其实从参数上就很容易理解怎么使用。看上面的两个函数有利于理解YAHOO.util.Dom.batch的调用方式。
接下来,粗略看下getXY
getXY:function(el){
varf=function(el){
//确定元素是否“肉眼可见”
if((el.parentNode===null||el.offsetParent===null||
this.getStyle(el,'display')=='none')&&
el!=el.ownerDocument.body){
returnfalse;
}
returngetXY(el);
};
returnY.Dom.batch(el,f,Y.Dom,true);
},getX与getY方法也是调用此函数,只是获取返回值的数组元素不一样。由于浏览器的兼容问题,提供给用户的YAHOO.util.Dom.getXY也仅仅是判断变量以后,再扔给最为复杂的内部getXY函数。
OK,留下太多的“悬念”了,下一期着重将它们解决。