我才12 ?

YAHOO.util.Dom.getElementsByClassName的一点小改进~

由于昨天遇到的一个问题,才有了这种想法。目前的YAHOO.util.Dom.getElementsByClassName仅支持一个class的寻找,如果我想寻找多个class的话就要多操作几次了,而且如果要给这些节点添加相同的事件的话,又要首先把它们放到一个数组,然后给新的数组添加事件,或者分别给各个数组添加事件,挺麻烦的,所以给YAHOO.util.Dom.getElementsByClassName做一点小改进,让它可以找到包含任何一个所给class的所有节点。

getElementsByClassName: function(className, tag, root, apply, o, overrides) {
    className = lang.trim(className);
    tag = tag || '*';
    root = (root) ? Y.Dom.get(root) : null || document; 
    if (!root) {
        return [];
    }
    var nodes = [],
        elements = root.getElementsByTagName(tag),
        hasClass = Y.Dom.hasClass;
    if(className.indexOf('|')>0) {
        var classnames = className.split('|');
        //找到所有节点
        for (var i = 0, len = elements.length; i < len; ++i) {
            for (var j = 0; j < classnames.length; ++j) {
                if ( hasClass(elements[i], lang.trim(classnames[j])) ) {
                    nodes[nodes.length] = elements[i];
                }
            }
        }
        //剔除相同的节点
        for (var k = 0; k < nodes.length; k++) {
            for(var l = k+1; l < nodes.length; l++) {
                if(nodes[k] == nodes[l]) {
                    nodes.splice(l,1);
                }
            }
        }
    } else {
        for (var i = 0, len = elements.length; i < len; ++i) {
            if ( hasClass(elements[i], className) ) {
                nodes[nodes.length] = elements[i];
            }
        }

}
if (apply) {
    Y.Dom.batch(nodes, apply, o, overrides);
}
return nodes;

}

用法很简单,就是在class之间加上“|”,比如:YAHOO.util.Dom.getElementsByClassName(‘hehe|haha|heihei’)。

标签: ,

这篇文章发布于 2009年04月14日,星期二,07:46,归类于 编码。 您可以跟踪这篇文章的评论通过 RSS 2.0 feed。 您可以留下评论,或者从您的站点trackback

7 条评论

雁过留声

这位姐姐,你好,你的浏览器版本太低了,为了避免您中毒,请您升级您的浏览器!