Javascript YUI 讀碼日記之 YAHOO.util.Dom - Part.2 0
更新時間:2008年03月22日 14:41:37 作者:
繼續(xù)在 YAHOO.util.Dom 中徘徊。由于 YAHOO.util.Dom 多次調(diào)用 batch 方法,所以先看看這個函數(shù)是怎么寫的。有關(guān) batch 的用法,可以參見這里,相關(guān)的代碼如下
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 庫的其他大多方法
的第一個參數(shù)可以是一個 id / 元素對象 或 一組 id/元素對象,減少了循環(huán)的使用。在這里可以找到 call 與 apply 的用法。在了解了 batch 以后,下來看 YUI.util.Dom 是怎么使用這一方法的,一口氣看兩個函數(shù)
getStyle: function(el, property) {
// toCamel 函數(shù)后面介紹
property = toCamel(property);
// 獲取節(jié)點的樣式
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);
// 設(shè)置節(jié)點的樣式
var f = function(element) {
setStyle(element, property, val);
};
Y.Dom.batch(el, f, Y.Dom, true);
},有關(guān)這兩個函數(shù)的具體用法,可以看下相關(guān)的文檔。其實從參數(shù)上就很容易理解怎么使用??瓷厦娴膬蓚€函數(shù)有利于理解 YAHOO.util.Dom.batch 的調(diào)用方式。
接下來,粗略看下 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 方法也是調(diào)用此函數(shù),只是獲取返回值的數(shù)組元素不一樣。由于瀏覽器的兼容問題,提供給用戶的 YAHOO.util.Dom.getXY 也僅僅是判斷變量以后,再扔給最為復雜的內(nèi)部 getXY 函數(shù)。
OK,留下太多的“懸念”了,下一期著重將它們解決。
// 讓 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 庫的其他大多方法
的第一個參數(shù)可以是一個 id / 元素對象 或 一組 id/元素對象,減少了循環(huán)的使用。在這里可以找到 call 與 apply 的用法。在了解了 batch 以后,下來看 YUI.util.Dom 是怎么使用這一方法的,一口氣看兩個函數(shù)
getStyle: function(el, property) {
// toCamel 函數(shù)后面介紹
property = toCamel(property);
// 獲取節(jié)點的樣式
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);
// 設(shè)置節(jié)點的樣式
var f = function(element) {
setStyle(element, property, val);
};
Y.Dom.batch(el, f, Y.Dom, true);
},有關(guān)這兩個函數(shù)的具體用法,可以看下相關(guān)的文檔。其實從參數(shù)上就很容易理解怎么使用??瓷厦娴膬蓚€函數(shù)有利于理解 YAHOO.util.Dom.batch 的調(diào)用方式。
接下來,粗略看下 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 方法也是調(diào)用此函數(shù),只是獲取返回值的數(shù)組元素不一樣。由于瀏覽器的兼容問題,提供給用戶的 YAHOO.util.Dom.getXY 也僅僅是判斷變量以后,再扔給最為復雜的內(nèi)部 getXY 函數(shù)。
OK,留下太多的“懸念”了,下一期著重將它們解決。
相關(guān)文章
學習YUI.Ext 第六天--關(guān)于樹TreePanel(Part 2異步獲取節(jié)點)
學習YUI.Ext 第六天--關(guān)于樹TreePanel(Part 2異步獲取節(jié)點)...2007-03-03Ext第一周 史上最強學習筆記---GridPanel(基礎(chǔ)篇)
我不想教各位新手什么高級技術(shù),因為我也在研究,只是想教大家一個思考的方向,能夠具有舉一反三的能力,能夠真正學會Ext和開始深入了解。2008-12-12