手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >YUI 读码日记之 YAHOO.util.Dom - Part.1
YUI 读码日记之 YAHOO.util.Dom - Part.1
摘要:先绕开头部很多的if...else(其实就是定义toCamel与getStyle两个函数)-由于浏览器的实现不统一,才造成如此麻烦的情况,回...

先绕开头部很多的if...else(其实就是定义toCamel与getStyle两个函数)-由于浏览器的实现不统一,才造成如此麻烦的情况,回头可以聊聊这些代码。

下面我们在YAHOO.util.Dom类中看看有哪些宝藏。目前思想已经逐步的分裂,我看见个函数说个函数。

//基本上可以认为是document.getElementById的翻版

get:function(el){

//如果已经是HTMLElement,那么就直接返回

if(el&&(el.nodeType||el.item)){

returnel;

}

//如果是字符串,那么就返回有这个ID的Element

if(YAHOO.lang.isString(el)||!el){

returndocument.getElementById(el);

}

//看起来是个数组,循环调用自身,获取Eelement

if(el.length!==undefined){

varc=[];

for(vari=0,len=el.length;i<len;++i){

c[c.length]=Y.Dom.get(el[i]);

}

returnc;

}

returnel;

},这段代码写得非常的精妙。坦白的说,上述代码中的循环体,如果不加思索的话,恐怕就会写成

for(vari=0,len=el.length;i<len;++i){

c[c.length]=document.getElementById(el[i]);

}虽然也能正常工作,但是前面的判断就失去了意义。

继续走马观花,现在看看getElementsByClassName的内部机制。有关getElementsByClassName的详细调用,可以参看YUI文档。

getElementsByClassName:function(className,tag,root,apply){

//获取tag标签,默认为所有(“*”)

tag=tag||'*';

//指定跟节点名

root=(root)?Y.Dom.get(root):null||document;

if(!root){

return[];

}

//初始化节点信息

varnodes=[],

elements=root.getElementsByTagName(tag),

re=getClassRegEx(className);

//滤掉不符合规则的节点

for(vari=0,len=elements.length;i<len;++i){

if(re.test(elements[i].className)){

//你一定很奇怪为什么用nodes.length而不是用i

//仔细考虑下:^)

nodes[nodes.length]=elements[i];

//执行回调函数

if(apply){

apply.call(elements[i],elements[i]);

}

}

}

returnnodes;

},教科书式的DOM节点获取和过滤,初始化数据以及操作数据都显得非常的严谨而且正规,YUI的代码让我有几分的“安全感”。类似的,再来一个getElementsBy函数,相应代码如下

getElementsBy:function(method,tag,root,apply){

//与上述函数相同,略

tag=tag||'*';

root=(root)?Y.Dom.get(root):null||document;

if(!root){

return[];

}

varnodes=[],

elements=root.getElementsByTagName(tag);

for(vari=0,len=elements.length;i<len;++i){

//根据自定义函数返回值判断节点的属性

if(method(elements[i])){

nodes[nodes.length]=elements[i];

if(apply){

apply(elements[i]);

}

}

}

returnnodes;

},OK,今天就先到这里。

【YUI 读码日记之 YAHOO.util.Dom - Part.1】相关文章:

动态提示的下拉框

JS实现带缓冲效果打开、关闭、移动一个层的方法

CSS+JS构建的图片查看器

详解 JavaScript 闭包的小知识

JavaScript基本语法讲解

简述JavaScript中正则表达式的使用方法

检测用户按键

仅30行代码实现Javascript中的MVC

JS创建对象几种不同方法详解

获得当前页面URL地址的三个JS代码

精品推荐
分类导航