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

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

(0)

相关推荐

  • Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3

    var patterns = {     HYPHEN: /(-[a-z])/i,     ROOT_TAG: /^body|html$/i }; var toCamel = function(property) {     // 如果没有 -[a-z] 字母,则直接返回     if ( !patterns.HYPHEN.test(property) ) {         return property;     } // 如果有缓存,直接返回替换后的值     if (propertyCa

  • javascript YUI 读码日记之 YAHOO.util.Dom - Part.4

    var getXY = function() {     // 判断是否是 IE     if (document.documentElement.getBoundingClientRect) {         // 注1         return function(el) {             var box = el.getBoundingClientRect(); var rootNode = el.ownerDocument;             return [box.

  • javascript中一些util方法汇总

    javascript中一些util方法汇总 /***************原生对象工类方法****************/ /** * 判断非空 * @param obj * @returns {boolean} */ function isEmpty(obj) { if (obj == undefined || obj == null || new String(obj).trim() == '') { return true; } else { return false; } } /**

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

    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; // 看起来是个 H

  • YUI 读码日记之 YAHOO.util.Dom - Part.1

    先绕开头部很多的 if...else (其实就是定义 toCamel 与 getStyle 两个函数) - 由于浏览器的实现不统一,才造成如此麻烦的情况,回头可以聊聊这些代码. 下面我们在 YAHOO.util.Dom 类中看看有哪些宝藏.目前思想已经逐步的分裂,我看见个函数说个函数. // 基本上可以认为是 document.getElementById 的翻版 get: function(el) {     // 如果已经是 HTMLElement ,那么就直接返回     if (el &

  • YUI 读码日记之 YAHOO.lang.is*

    YAHOO.lang = YAHOO.lang || {     isArray: function(o) {          if (o) {            var l = YAHOO.lang;            // 如果该对象有 length 这个属性,同时支持 splice 方法,            // 那么就认为它为数组.            return l.isNumber(o.length) && l.isFunction(o.splice);   

  • javascript输出AscII码扩展集中的字符方法

    如下所示: function test(){ var c=""; for(var i=1;i<65536;i++){ if((i%10)==0){ c+=i+':\t'+String.fromCharCode(i)+'\t'+'\n';}else{ c+=i+':\t'+String.fromCharCode(i)+'\t';} } document.write(c); } 以上就是小编为大家带来的javascript输出AscII码扩展集中的字符方法全部内容了,希望大家多多支持

  • javascript学习笔记(三)BOM和DOM详解

    js组成 我们都知道, javascript 有三部分构成,ECMAScript,DOM和BOM,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,ie和其他的浏览器风格迥异. 1. DOM 是 W3C 的标准: [所有浏览器公共遵守的标准] 2. BOM 是 各个浏览器厂商根据 DOM 在各自浏览器上的实现;[表现为不同浏览器定义有差别,实现方式不同] 3. window 是 BOM 对象,而非 js 对象: DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API). BOM

  • JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)

    一.JavaScript简介 JavaScript是一种解释执行的脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,它遵循ECMAScript标准.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,主要用来给HTML增加动态功能. 几乎所有主流的语言都可以编译为JavaScript,进而能够在所有平台上的浏览器中执行,这也体现了JavaScript的强大性和在Web开发中的重要性.如Blade:一个Visual Studio扩展,可以将C#代码转

  • JavaScript利用键盘码控制div移动

    前言 在生活中肯定有玩过贪吃蛇的游戏,那么要怎么样用键盘码来实现div的移动呢?下面就分享一个Demo. 利用键盘码来控制div移动源码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box { height: 100px; width: 10

  • JavaScript让IE浏览器event对象符合W3C DOM标准

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu

随机推荐