dom 4 easy mod 2.0

by ebaloSnositelXX

HTML

<body>
<div class="foo">
    <div class="bar">
        <div id="wow"></div>
    </div>
    <div class="ho-ho"></div>
    <div class="ho"></div>
    <div class="foo"></div>
</div>
<div class="foo-foo"></div>
</body>

JavaScript

function find(selector, context) {
        if (!context) {
            context = document.body;
        }
        //так как лень было искать эмулятор некробраузеров,
        //предположим что такой перед нами
        /*
         if (context.querySelectorAll) {
         return context.querySelectorAll(selector);
         }
         */
        //if (!HTMLElement.prototype.getElementsByClassName) {
        if (true) {
            HTMLElement.prototype.getElementsByClassName = getElementsByClassName;
        }
        var checks = [
            {reg: /^\.(\w+-?\w+)/, func: pipe(context.getElementsByClassName, collectionToArray)},
            {reg: /^#(\w+-?\w+)/,  func: getElemByIdWithContext},
            {reg: /^(\w+)$/,       func: pipe(context.getElementsByTagName.bind(context), collectionToArray)}
        ];
        selector = selector.trim();
        var array = [];
        for (var i = 0; i < checks.length; i++) {
            var match = selector.match(checks[i].reg);
            //console.log(match);
            if (!match) {
                continue;
            }
            //console.log(checks[i].func);
            var result = checks[i].func(match[1], context);
            array = array.concat(result);
            break;
        }
        if (array.length > 0) {
            return array;
        } else {
            return null
        }
    }

    function pipe(func1, func2) {
        return function() {
            var result = func1.apply(null, collectionToArray(arguments));
            return func2(result);
        }
    }

    function collectionToArray(collection) {
        return Array.prototype.slice.call(collection);
    }

    function getElementsByClassName(selector, context) {
        //console.log(elems);
        var result = [];
        var elements = context.children;
        //console.log(elements);
        if (!elements) {
            return null;
        }
        var regex = new RegExp("(^|\\s+)" + selector + "($|\\s+)");
        for...