The source code

    /**
     * @ignore
     *  import methods from DOM to NodeList.prototype
     * @author yiminghe@gmail.com
     */
    KISSY.add('node/attach', function (S, DOM, Event, NodeList, undefined) {

        var NLP = NodeList.prototype,
            makeArray = S.makeArray,
        // DOM 添加到 NP 上的方法
        // if DOM methods return undefined , Node methods need to transform result to itself
            DOM_INCLUDES_NORM = [
                'nodeName',
                'equals',
                'contains',
                'index',
                'scrollTop',
                'scrollLeft',
                'height',
                'width',
                'innerHeight',
                'innerWidth',
                'outerHeight',
                'outerWidth',
                'addStyleSheet',
                // 'append' will be overridden
                'appendTo',
                // 'prepend' will be overridden
                'prependTo',
                'insertBefore',
                'before',
                'after',
                'insertAfter',
                'test',
                'hasClass',
                'addClass',
                'removeClass',
                'replaceClass',
                'toggleClass',
                'removeAttr',
                'hasAttr',
                'hasProp',
                // anim override
    //            'show',
    //            'hide',
    //            'toggle',
                'scrollIntoView',
                'remove',
                'empty',
                'removeData',
                'hasData',
                'unselectable',

                'wrap',
                'wrapAll',
                'replaceWith',
                'wrapInner',
                'unwrap'
            ],
        // if return array ,need transform to nodelist
            DOM_INCLUDES_NORM_NODE_LIST = [
                'filter',
                'first',
                'last',
                'parent',
                'closest',
                'next',
                'prev',
                'clone',
                'siblings',
                'contents',
                'children'
            ],
        // if set return this else if get return true value ,no nodelist transform
            DOM_INCLUDES_NORM_IF = {
                // dom method : set parameter index
                'attr': 1,
                'text': 0,
                'css': 1,
                'style': 1,
                'val': 0,
                'prop': 1,
                'offset': 0,
                'html': 0,
                'outerHTML': 0,
                'data': 1
            },
        // Event 添加到 NP 上的方法
            EVENT_INCLUDES = [
                'on',
                'detach',
                'fire',
                'fireHandler',
                'delegate',
                'undelegate'
            ];

        NodeList.KeyCodes = Event.KeyCodes;

        function accessNorm(fn, self, args) {
            args.unshift(self);
            var ret = DOM[fn].apply(DOM, args);
            if (ret === undefined) {
                return self;
            }
            return ret;
        }

        function accessNormList(fn, self, args) {
            args.unshift(self);
            var ret = DOM[fn].apply(DOM, args);
            if (ret === undefined) {
                return self;
            }
            else if (ret === null) {
                return null;
            }
            return new NodeList(ret);
        }

        function accessNormIf(fn, self, index, args) {

            // get
            if (args[index] === undefined
                // 并且第一个参数不是对象，否则可能是批量设置写
                && !S.isObject(args[0])) {
                args.unshift(self);
                return DOM[fn].apply(DOM, args);
            }
            // set
            return accessNorm(fn, self, args);
        }

        S.each(DOM_INCLUDES_NORM, function (k) {
            NLP[k] = function () {
                var args = makeArray(arguments);
                return accessNorm(k, this, args);
            };
        });

        S.each(DOM_INCLUDES_NORM_NODE_LIST, function (k) {
            NLP[k] = function () {
                var args = makeArray(arguments);
                return accessNormList(k, this, args);
            };
        });

        S.each(DOM_INCLUDES_NORM_IF, function (index, k) {
            NLP[k] = function () {
                var args = makeArray(arguments);
                return accessNormIf(k, this, index, args);
            };
        });

        S.each(EVENT_INCLUDES, function (k) {
            NLP[k] = function () {
                var self = this,
                    args = makeArray(arguments);
                args.unshift(self);
                Event[k].apply(Event, args);
                return self;
            }
        });

    }, {
        requires: ['dom', 'event/dom', './base']
    });

    /*
     2011-05-24
     - yiminghe@gmail.com：
     - 将 DOM 中的方法包装成 NodeList 方法
     - Node 方法调用参数中的 KISSY NodeList 要转换成第一个 HTML Node
     - 要注意链式调用，如果 DOM 方法返回 undefined （无返回值），则 NodeList 对应方法返回 this
     - 实际上可以完全使用 NodeList 来代替 DOM，不和节点关联的方法如：viewportHeight 等，在 window，document 上调用
     - 存在 window/document 虚节点，通过 S.one(window)/new Node(window) ,S.one(document)/new NodeList(document) 获得
     */