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


Posted in Javascript onMarch 22, 2008

batch: function(el, method, o, override) {
    // 让 el 始终为 HTMLElement
    el = (el && (el.tagName || el.item)) ? el : Y.Dom.get(el); 

    if (!el || !method) {
        return false;
    }

    //  确定返回的对象
    var scope = (override) ? o : window;

    // 看起来是个 HTMLElement 或者不是 Array
    if (el.tagName || el.length === undefined) {
        return method.call(scope, el, o);
    } 

    var collection = []; 
    for (var i = 0, len = el.length; i < len; ++i) {
        collection[collection.length] = method.call(scope, el[i], o);
    }

    return collection;
},小马补充

batch 是 YUI Dom 库的核心之一。它最大的意义在于,它让 Dom 库的其他大多方法
的第一个参数可以是一个 id / 元素对象 或 一组 id/元素对象,减少了循环的使用。在这里可以找到 call 与 apply 的用法。在了解了 batch 以后,下来看 YUI.util.Dom 是怎么使用这一方法的,一口气看两个函数

getStyle: function(el, property) {
    // toCamel 函数后面介绍
    property = toCamel(property);

    // 获取节点的样式
    var f = function(element) {
        return getStyle(element, property);
    };

    return Y.Dom.batch(el, f, Y.Dom, true);
},setStyle: function(el, property, val) {
    property = toCamel(property);

    // 设置节点的样式
    var f = function(element) {
        setStyle(element, property, val);        
    };

    Y.Dom.batch(el, f, Y.Dom, true);
},有关这两个函数的具体用法,可以看下相关的文档。其实从参数上就很容易理解怎么使用。看上面的两个函数有利于理解 YAHOO.util.Dom.batch 的调用方式。

接下来,粗略看下 getXY

getXY: function(el) {
    var f = function(el) {
        // 确定元素是否“肉眼可见”
        if ( (el.parentNode === null || el.offsetParent === null ||
                this.getStyle(el, 'display') == 'none') && 
                            el != el.ownerDocument.body) {
            return false;
        }

        return getXY(el);
    };

    return Y.Dom.batch(el, f, Y.Dom, true);
},getX 与 getY 方法也是调用此函数,只是获取返回值的数组元素不一样。由于浏览器的兼容问题,提供给用户的 YAHOO.util.Dom.getXY 也仅仅是判断变量以后,再扔给最为复杂的内部 getXY 函数。

OK,留下太多的“悬念”了,下一期着重将它们解决。

Javascript 相关文章推荐
javascript 面向对象编程基础:封装
Aug 21 Javascript
JS分页效果示例
Oct 11 Javascript
javascript的parseFloat()方法精度问题探讨
Nov 26 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
Javascript中prototype的使用详解
Jun 18 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
angular+webpack2实战例子
May 23 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
微信小程序实现留言功能
Oct 31 Javascript
vue实现匀速轮播效果
Jun 29 Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 #Javascript
YUI 读码日记之 YAHOO.lang.is*
Mar 22 #Javascript
详解new function(){}和function(){}() 区别分析
Mar 22 #Javascript
Javascript的一种模块模式
Mar 22 #Javascript
javascript cookie解码函数(兼容ff)
Mar 17 #Javascript
简单的JS多重继承示例
Mar 13 #Javascript
JMenuTab简单使用说明
Mar 13 #Javascript
You might like
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
ip签名探针
2006/10/09 PHP
实用函数2
2007/11/08 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
python使用mysql的两种使用方式
2018/03/07 Python
Python读取表格类型文件代码实例
2020/02/17 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
机械制造与自动化应届生求职信
2013/11/16 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
篝火晚会主持词
2014/03/25 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python