欢迎来到福编程网,本站提供各种互联网专业知识!

Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0

发布时间:2008-03-22 作者: 来源:转载
继续在YAHOO.util.Dom中徘徊。由于YAHOO.util.Dom多次调用batch方法,所以先看看这个函数是怎么写的。有关batch的用法,可以参见这里,相关的代码如下
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;icollection[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,留下太多的“悬念”了,下一期着重将它们解决。

相关推荐