Рекурсивный поиск родителя, удовлетворяющего условию

Ищем родителя у которого .className содержит 'TimeContainer'. Пример:


var timeContainer = null;

FindParentElementByFilter(referer, function(parent){
        if(Common.Class.match(parent, 'TimeContainer')){
            timeContainer = parent;
            return true;
        }
    return false;
});

    

Условие безымянной функции может быть любым.

Функция:


/**
 * Ищет до первого parentNode удовлетворяющим условиям fnc
 * param {Node} node
 * param {Function} fnc
 */
function FindParentElementByFilter(node, fnc){
    if(node.parentNode)
        if(!fnc(node.parentNode))
            FindParentElementByFilter(node.parentNode, fnc);
        else{
            return node.parentNode;
        }
}
    

Вообще конечно принцип функции был спизжен из .NET Framework, а конкретнее метод .FindAll() из List<T>.