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

时间:2021-05-28

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,留下太多的“悬念”了,下一期着重将它们解决。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章